Das SQLAlchemy-Ergebnis für die UTF-8-Spalte ist vom Typ 'str'. Warum?
Ich habe eine SQL-Abfrage, die ich mit einer SQLAlchemy-Engine wie folgt ausführe:
result = engine.execute('SELECT utf_8_field FROM table')
Die Datenbank ist MySQL und der Spaltentyp ist TEXT mit UTF-8-Codierung. Der Typ des zurückgegebenen utf_8_field ist "str", auch wenn ich beim Erstellen der Engine die Option convert_unicode = True gesetzt habe. Was jetzt passiert ist, dass wenn ich ein Zeichen wie 'é' in meinem String habe (das nicht in 7-Bit-ASCII ist, sondern in der erweiterten ASCII-Menge), ich einen UnicodeDecodeError bekomme, wenn ich versuche, dies auszuführen:
utf_8_field.encode("utf-8")
Der genaue Fehler ist:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 1: ordinal not in range(128)
Als ich dies untersuchte, stellte ich fest, dass str.encode den erweiterten ASCII-Zeichensatz nicht unterstützt! Ich finde das wirklich seltsam, aber das ist eine andere Frage.
Was ich nicht verstehe, ist, warum SQLAlchemy mir keine Unicode-Zeichenfolge gibt. Ich habe zuvor DB-API verwendet und das hat gut funktioniert. Ich habe auch noch keine SQLAlchemy-Tabellenobjekte für meine Tabellen. Deshalb verwende ich einen Ausführungsbefehl.
Irgendeine Idee?