Python und mysqldb 1.2.1_p2

seit einigen jahren habe ich eine kleine anwendung zur verwaltung von dvds und videokassetten.
alles selbst programmiert, natürlich in meine lieblingssprache: python:-)

die daten liegen in einer mysqldb und da ich ein utf system betreibe, gibts da immer mal gewisses reibungspotential zwischen mysql und python.

seit ich auf die version 1.2.1_p2 von mysqldb upgedated habe, bricht python immer wenn ich einen umlaut wegschreiben will mit einer exception in zeile 146 der datei /usr/lib/python2.4/site-packages/MySQLdb/cursors.py ab. die fehlermeldung sieht ungefähr so aus:

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

nun habe ich zuerst ein paar stunden in meinem python code gesucht und nix gefunden.
dort benutze ich die funktionen

#

# 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“)

zur konvertierung von und nach utf-8.

also hab ich mich mal grübelnderweise über die datei /usr/lib/python2.4/site-packages/MySQLdb/cursors.py her gemacht.
ersetzt man die zeile 146 durch

# patch by HM for unicode – 16.12.2006

if isinstance(query, unicode):

query = query.encode(charset)

dann geht’s wieder.
dabei wir 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.

Schreibe einen Kommentar

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

:bye: 
:good: 
:negative: 
:scratch: 
:wacko: 
:yahoo: 
B-) 
mehr...
 
ALL-INKL.COM - Webhosting Server Hosting Domain Provider Blogverzeichnis - Blog Verzeichnis bloggerei.de