Греческие символы вставляют mysqldb через ОШИБКУ TextCtrl - PullRequest
0 голосов
/ 22 февраля 2012

Я создал в MySQdb БД с таблицей с именем example, в этой таблице я хочу сохранить имя, это имя на греческом языке. Моя проблема возникает, когда я пытаюсь сохранить имя мгновенно без использования textctrl, все нормально, но когда я использую textctrl, я принимаю ошибку. Посмотрите код: Кто-нибудь может мне помочь, пожалуйста, я попробую кодировать в UTF-8, декодировать в UTF-8, Unicode, но ничего.

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()

Ответы [ 2 ]

1 голос
/ 22 февраля 2012

Используете ли вы Unicode-версию wxPython? Это может просто решить эту проблему. Или вы можете взглянуть на следующие две ссылки:

Вы можете подделать это, просто сделав что-то вроде этого:

newname= u"%s" % self.name.GetValue()
0 голосов
/ 22 февраля 2012

Есть ли какая-то разница, если вы позволите модулю db выполнять подстановку параметров вместо того, чтобы Python делал это?(В любом случае, это намного безопаснее, если вы вводите введенные пользователем значения.) Например:

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

При чтении документов MySQLdb это звучит так, как будто это также автоматически преобразует в / из юникода, когда параметр подключения charsetустановлен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...