[Python-de] codec-Problem mit Tkinter und MySQL

Alexander Pelzer alepe at arcor.de
Sam Feb 26 20:56:33 CET 2005


Moin Leute!

Ich habe eine MySQL-Dtanbank gebaut, die ich über ein Tkinter-GUI 
füttern will. (Die Datenbank ist per default auf latin-1 eingestellt.) 
Ich habe nach einiger Analyse glaube ich zwei Probleme:


1)
Im GUI tauchen Listboxen auf, deren Inhalt ich aus einer extra Tabelle 
der DB hole. (z.B. eine Liste der Veranstaltungsart, es wird eine Art 
Terminerfassung) Beim Abfragen der Listbox (li_1.get("active")) möchte 
ich gerne zum ausgewählten Eintrag die zugehörige id aus der Tabelle 
fischen um sie in der Muttertabelle einfügen zu können.

Das mache ich so: (korrekter: ich versuche es so)

#art_der_veranstaltung ist eine zweispaltige Tabelle id|char(256)
[...]
c.execute(""" SELECT * FROM art_der_veranstaltung """)
liste_veranstaltungs_art = c.fetchall()

#daraus wird auch die Listbox gefüttert, aber das funktioniert ja
#(auch mit umlauten)

for zeile in liste_veranstaltungs_art:
    if zeile[1] == li_9.get("active"):
        veranstaltungs_art_id = zeile[0]
    else:
        veranstaltungs_art_id = 1
[...]

Damit gibt's ein Problem:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 14: 
ordinal not in range(128)

Das, was ich von der GUI wiederbekomme (li_9.get("active")) scheint 
unicode zu sein (huch?) und (zeile[1]) ist str. Muss ich jetzt das eine 
ins andere de-/encodieren? Und wenn, wen wierum?

2)
(vielleicht ja das selbe Problem)
Texteingabefelder akzeptieren keine Umlaute (oder EUR-Zeichen). Im GUI 
wird noch alles formidabel dargestellt, hole ich den Inhalt, und 
versuche ihn in meinen SQL-Befehl zu schleusen gibt's wieder 'nen Fehler 
(beim Ausführen des SQL-Befehls:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in 
position 208: ordinal not in range(128)

geholt wird mit:
titel = en_1.get()
beschreibung = te_7.get(1.0, END)

c.execute("""INSERT INTO termine (art_der_veranstaltung_id, datum_von, 
datum_bis, zeit_von, zeit_bis, titel, kosten_id, bemerkung_id, 
beschreibung, veranstaltungs_ort_id) VALUES (1, '%s', '%s', '%s', 
'%s','%s', 1, 1, '%s', 1)""" % (date_von, date_bis, zeit_von, zeit_bis, 
titel, beschreibung))

Hat jemand eine Idee? Ist wahrscheinlich trivial.

Grüße und schönes WE!
Alexander Pelzer
--
Alexander Pelzer
alepe at arcor.de