SQLAlchemy und UnicodeDecodeError

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Daishy
User
Beiträge: 21
Registriert: Samstag 4. April 2009, 12:40
Kontaktdaten:

SQLAlchemy und UnicodeDecodeError

Beitragvon Daishy » Samstag 4. April 2009, 13:09

Hi zusammen.

Ich versuche momentan mit Turbogears eine kleine Webseite ans laufen zu bekommen, allerdings pruegel ich mich schon seit zwei Tagen mit den Zeichensaetzen ^^.

Datenbank ist MySQL komplett auf UTF8: (Auszug aus show variables)

Code: Alles auswählen

character_set_client   utf8
character_set_connection   utf8
character_set_database   utf8
character_set_filesystem   binary
character_set_results   utf8
character_set_server   utf8
character_set_system   utf8
collation_connection   utf8_general_ci
collation_database   utf8_general_ci
collation_server   utf8_general_ci


Mein Model sieht wie folgt aus:

Code: Alles auswählen

# -*- coding: utf-8 -*-
...
adressTable = Table('adressen', metadata,
  Column('id', Integer, primary_key=True),
  Column('vorname',
String)
)


Ist die Option #sqlalchemy.convert_unicode=True ausgeschaltet, dann kann ich im Controller ein Query durchfuehren, und dieses Query per print direkt ausgeben (Typ ist zu dem Zeitpunkt str), allerdings bekomme ich dann im Template einen UnicodeDecodeError (es wird versucht in 'ascii' zu decodieren, was ja nicht geht, weil die Daten utf8 sind)

Schalte ich die Option an, so schaegt das Query schon im Controller fehlt:

Code: Alles auswählen

UnicodeDecodeError: 'utf8' codec can't decode bytes in position 5-10: unsupported Unicode code range


Hab schon wie ein bloeder gegooglet, aber die Tipps die ich gefunden haben bringen mich immer entweder zu dem einen oder dem anderen Fehler. Falls noch Informationen gebraucht werden, bitte einfach posten, ich liefer die dann sofort nach.

Vielen Dank und Schoene Gruesse,
Daishy
Daishy
User
Beiträge: 21
Registriert: Samstag 4. April 2009, 12:40
Kontaktdaten:

Beitragvon Daishy » Samstag 4. April 2009, 14:40

Also ich habe grade nochmal etwas rumprobiert und mal probiert in meinem Controller die Daten per Hand zu encodieren.

Code: Alles auswählen

for row in set:
  uni = row.vorname.decode("latin-1") # Geht
  uni = row.vorname.decode("utf-8") # Schlaegt Fehl


Also scheinen die Daten ja beim uebertragen vom Server immernoch in Latin-1 umcodiert zu werden. Wie koennte ich SQLAlchemy denn sagen, dass er es statt utf8 mal mit latin-1 versuchen soll?
Daishy
User
Beiträge: 21
Registriert: Samstag 4. April 2009, 12:40
Kontaktdaten:

Beitragvon Daishy » Samstag 4. April 2009, 15:20

Es scheint wirklich daran zu liegen, das MySQL immer noch latin-1 sendet. Nachdem ich dem Verbindungsstring nach explizit encoding="latin1" mitgegeben habe, hat er alles richtig codiert. Ist zwar irgendwie eine komische Loesung (da erst UTF-8->Latin->Unicode) aber es funktioniert erstmal ^^
tordmor
User
Beiträge: 100
Registriert: Donnerstag 20. November 2008, 10:29
Wohnort: Stuttgart

Beitragvon tordmor » Samstag 4. April 2009, 17:02

Spalte 'vorname' sollte wohl Unicode und nicht String sein.
Daishy
User
Beiträge: 21
Registriert: Samstag 4. April 2009, 12:40
Kontaktdaten:

Beitragvon Daishy » Samstag 4. April 2009, 18:43

Hi,
Aendert leider auch nichts an dem Verhalten. Ich hab es jetzt auf autoload gestellt und convert_unicode auf true und krieg Unicode-Objekte geliefert.
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

Beitragvon Pekh » Samstag 4. April 2009, 19:26

Ja, es liegt tatsächlich an der Codierung der Übertragung (Hab mich letzte Woche auch mit rumgeschlagen). Hänge einfach an den Connectionstring ein "?charset=utf8" ran, und das Problem ist Vergangenheit.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder