2012-02-22 20 views
0

私はMySQdbでテーブルを作成しました。このテーブルにはテーブルがあります。名前を保存します。 この名前はギリシャ語です。私の問題は次のとおりです。 Textctrlを使用するとすぐに名前を保存しますが、textctrlを使用するとerror.Lookコードを取得します。 誰でも可能ですか?私はutf-8でエンコードしてみてください。ギリシャ文字はTextCtrl経由でmysqldbを挿入しますエラー

import os 
import math 
import random 
import wx 
import MySQLdb 
import sys 
APP_SIZE_X = 500 
APP_SIZE_Y = 300 

# -*- coding: utf-8 -*- 

class MyFrame(wx.Frame): 
    def __init__(self, parent, id, title): 
     wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, size=(APP_SIZE_X, APP_SIZE_Y)) 

     panel = wx.Panel(self, -1,style=wx.SUNKEN_BORDER) 

     wx.StaticText(panel, -1,'Name', (10, 55),style=wx.LEFT) 
     self.name = wx.TextCtrl(panel, -1, '', (110, 55), (120, -1)) 

     save = wx.Button(panel, 1, 'Save', (70, 215),(130,-1)) 
     save.Bind(wx.EVT_BUTTON,self.OnSaveAsFile) 

     quitbtn = wx.Button(panel, 1, 'Quit', (250, 215),(130,-1)) 
     quitbtn.Bind(wx.EVT_BUTTON,self.OnQuit) 

    def OnSaveAsFile(self, event): 

     idis="000" 
     newname=self.name.GetValue() 



     db=MySQLdb.connect(host="localhost",use_unicode="True",charset="utf8",user="root",passwd="root",db="test") 
     cursor=db.cursor() 

     sql="""INSERT INTO TB_EXAMPLE(name) VALUES("%s","%s")"""%(idis,newname) 


     try: 


      cursor.execute(sql) 

      db.commit() 
      print 'save ok' 
     except: 

      print 'no save' 
      db.rollback() 

    def OnQuit(self,e): 

     self.Close() 








class MyApp(wx.App): 
    def OnInit(self): 
     frame = MyFrame(None, -1, 'form1.py') 
     frame.Show(True) 
     self.SetTopWindow(frame) 
     return True 

app = MyApp(0) 
app.MainLoop() 

答えて

1

wxPythonのユニコードバージョンを使用していますか?それはちょうどこの問題を解決するかもしれない。それとも、以下の二つのリンクを見てとることができます:

newname= u"%s" % self.name.GetValue() 
+0

はい私はwxpythonのユニコード版を使用しています – TLSK

+0

いいえ私はそれを偽造できません – TLSK

+0

その後、wxPythonメーリングリストで質問してみてください。このようなことをする方法を知っている人がいくつかいます。 –

0

をあなたはちょうどこのような何かを行うことによって、それ偽造することができるかもしれませんdbモジュールに、Pythonの代わりにパラメータの代入をさせると、それは何か違いがありますか? (ユーザー入力した値を挿入している場合、これはとにかくはるかに安全です。)例:

cursor.execute("INSERT INTO TB_EXAMPLE(name) VALUES(%s,%s)", (idis,newname)) 

文字セットの接続パラメータが設定されている場合もユニコードへ/から自動-変換することがそのように聞こえるのMySQLdbのドキュメントを読んでから、 。

+0

私は今それを試して、それは保存できません – TLSK

+0

ロビンはポイントがあります。個人的には、私はデータベースのやり取りの大部分でSQLAlchemyを使用しています。 –

関連する問題