Python und mysqldb 1.2.1_p2

Seit einigen Jahren habe ich eine kleine Anwendung zur Verwaltung von DVD’s und Videokassetten.
Alles selbst programmiert und natürlich in meine Lieblingssprache: python:-)

Die Daten liegen in einer mysqldb und da ich ein UTF System betreibe, gibt es immer wieder mal ein gewisses Reibungspotential zwischen mysql und python.

Seit ich auf die Version 1.2.1_p2 von mysqldb upgedated habe, bricht python immer dann ab, wenn ich einen Umlaut wegschreiben will. Dabei erscheint die Fehlermeldung in der Zeile 146 der Datei /usr/lib/python2.4/site-packages/MySQLdb/cursors.py. Die Fehlermeldung sieht ungefähr so aus:

UnicodeDecodeError: ‚ascii‘ codec can’t decode byte 0xc3 in position 50: ordinal not in range(128)

Ich habe zuerst ein paar Stunden in meinem Python Code gesucht und nichts gefunden. Dort benutze ich folgende Funktionen zur Konvertierung von und nach utf-8:

#
# two functions to convert from/to UTF8 for database access
#
def toUTF8(s):
    return unicode(str(s),"iso-8859-1").encode("utf-8")
def fromUTF8(s):
     return str(s).decode("utf-8")Code-Sprache: PHP (php)

Also habe ich mich grübelnderweise über die Datei /usr/lib/python2.4/site-packages/MySQLdb/cursors.py her gemacht und heraus gefunden, ersetzt man die Zeile 146 wie folgt, geht es wieder.

# patch by HM for unicode - 16.12.2006
if isinstance(query, unicode):
    query = query.encode(charset)Code-Sprache: PHP (php)

Dabei wird lediglich eine Typprüfung durchgeführt, die feststellt, ob Query von der klasse Unicode abstammt. Wenn ja, wird Query in Unicode umgesetzt, sonst passiert gar nichts.
Der Fehler entstand, wenn nicht encode-fähige Strings als Query übergeben wurden.

Teile diesen Beitrag

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

:bye: 
:good: 
:negative: 
:scratch: 
:wacko: 
:yahoo: 
B-) 
mehr …
 


Diese Seite verwendet Cookies. Mit der Nutzung von tuxlog erklärst Du Dich mit der Verwendung von Cookies einverstanden. Detaillierte Informationen über die Verwendung von Cookies auf dieser Website findest Du in der Datenschutzerklärung.

Nach oben scrollen