Frage

Ich habe in MySQdb eine Datenbank mit einer Tabelle namens example erstellt. In dieser Tabelle möchte ich einen Namen speichern. Dieser Name ist in griechischer Sprache. Mein Problem tritt auf, wenn ich versuche, den Namen sofort zu speichern, ohne textctrl zu verwenden. Es ist in Ordnung, aber wenn ich textctrl verwende, nehme ich einen Fehler. Kann mir bitte jemand helfen? Ich habe versucht, in utf-8 zu codieren, in utf-8 zu decodieren, um Unicode zu erstellen, aber nichts.

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

War es hilfreich?

Lösung

Verwenden Sie die Unicode-Version von wxPython?Das könnte dieses Problem beheben.Oder schauen Sie sich die folgenden zwei Links an:

Andere Tipps

Macht es einen Unterschied, ob Sie das DB-Modul die Parametersubstitution durchführen lassen, anstatt Python dies tun zu lassen?(Dies ist ohnehin viel sicherer, wenn Sie vom Benutzer eingegebene Werte einfügen.) Zum Beispiel:

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

Beim Lesen der MySQLdb-Dokumente klingt es so, als würde dies auch automatisch in / aus Unicode konvertiert, wenn der Zeichensatz-Verbindungsparameter festgelegt wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top