django: MySQLdb v1.2.1g2 und unicode Fehler...

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Kann es sein, das mit der alten Version von MySQLdb, Probleme mit unicode "normal" sind?

Ich muß auch das alte Backend in django benutzten ("mysql_old")...

EDIT: Ist wohl keine gute Idee mysql_old zu nutzten: http://code.djangoproject.com/wiki/Back ... Ldbversion

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ja, Probleme mit MySQL sind ganz normal, da das Binding zu Python ein tolles Stück Software ist, die geschrieben wurde, um Python-Programmierer von PostgreSQL zu überzeugen ;)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Hm... Klar MySQLdb hat in der Vergangenheit einigen Mist gebaut zum Thema Encoding... Ich denke das beste ist es eine neue Version zu nutzten... Dennoch hab ich mir das ganze mal näher angesehen.

Ich glaube das Problem ist, das mysql_old zwar einige Anstrengungen unternimmt, die Fehler in alten MySQLdb Versionen auszugleichen, aber dennoch wurde das was übersehen.

Normalerweise soll IMHO das DB backend unicode zurück liefern. Das macht jedenfalls das normale "mysql" backend mit einer aktuellen MySQLdb Version.

Ich hab mal einen Patch geschrieben, damit auch das alte "mysql_old" backend Bytestrings in unicode zurück liefert:
http://paste.pocoo.org/show/4100/

Lokal bei mir funktioniert es. Auf dem Web-Server mit einem kleinen Test-Skript geht's auch.

Leider sind aber auch mit diesem Patch meine unicode Fehler nicht weg :(
Nun weiß ich gerade nicht, wo das Problem liegt, aber ich denke nicht, das es noch am DB Adapter liegt...

Du kannst es dir ja mal ansehen! Führe einfach mal eine Suche auf http://www.jensdiemer.de/_command/1/search/do_search/ aus. z.B. nach "test"...

Das Problem ist hier:
File "./PyLucid/plugins_internal/search/search.py" in _search
138. score += content.count(term)

UnicodeDecodeError at /_command/1/search/do_search/
'ascii' codec can't decode byte 0xc3 in position 243: ordinal not in range(128)
Die Variablen:

Code: Alles auswählen

content = u'...h2. \xdcber mich...'
term = u'test'
Wobei u'\xdcber' auch richtig ist. Denn "\xdc" ist ja ein "Ü".
Ich frage mich warum bei content.count(term) denn überhaupt ein unicode Teil in einem String gewandelt werden soll. Lokal funktioniert das wunderbar.

Jemand einen Tipp???

EDIT: Ich sehe gerade zum mysql_old Problem gibt es auch ein Ticket: http://code.djangoproject.com/ticket/4741
Dort hab ich mal meinen Patch dran gepackt...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Hab den Fehler gefunden. Und zwar nutzt django's ORM nicht nur fetchone bzw. fetchall sondern auch fetchmany. Das hatte ich mir meinem Patch aber nicht bedacht!

Im ticket ist nun eine neue Version, die bei mir funktioniert: http://code.djangoproject.com/ticket/4741

Somit hab ich nun keine Unicode Fehler mehr, auch mit mysql_old :lol:

Etwas komisch ist es allerdings schon, das der Traceback die Strings als Unicode-String angezeigt hat. Die waren nämlich Byte-Strings. Also wurde da was für den Traceback konvertiert.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten