2012-02-22 3 views
0

Я создал в MySQdb базу данных с таблицей с именем example, в этой таблице я хочу сохранить имя, Это имя написано на греческом языке. Моя проблема заключается в том, что я пытаюсь сохранить имя мгновенно без использования textctrl, его нормально, но когда я использую textctrl, я беру ошибку. Посмотрите на код: Может кто-нибудь мне помочь, я попробовал кодирование в utf-8, декодирование в utf-8, в unicode, но ничего.Греческие символы вставляют mysqldb через TextCtrl ERROR

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

Да, я использую unicode версию 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 для большинства взаимодействий с базой данных. –