Warum SQLAlchemy create_engine mit charset=utf8 zurück python-Typ <str> und nicht Typ <unicode>?

Mit Python 2.7 und SQLAlchemy 0.7, ich bin die Verbindung zu einer MySQL-DB mit dem Befehl:

engine = create_engine('mysql://username:password@host/dbname?charset=utf8',echo=False)

Entsprechend der SQLAlchemy-docs, die Einstellung charset=utf-8 impliziert automatisch use_unicode=1, so dass alle Saiten kommen sollte, wieder als unicode. http://docs.sqlalchemy.org/en/rel_0_7/dialects/mysql.html speziell gibt das Beispiel

#set client encoding auf utf8; alle strings als unicode
create_engine('mysql+mysqldb:///mydb?charset=utf8')

Warum also dann, wenn ich ein text-Feld Abfragen in einer Klasse zugeordnet, bedeutet das, dass Feld am Ende mit Typ "str"?

Base = declarative_base(engine)

class RegionTranslation(Base):
    ''''''
    __tablename__ = 'RegionTranslation'
    __table_args__ = {'autoload':True}
    def __init__(self, region_id, lang_id, name):
        self.region_id = region_id
        self.lang_id = lang_id
        self.name = name

rtrans = session.query(RegionTranslation).filter_by(region_id = 1, lang_id = 6).one()
print (type(rtrans.name))

Die Ausgabe ist

 <type 'str'>

Wenn ich einfach akzeptieren und entschlüsseln Sie die Zeichenfolge, bevor Sie es, Dinge sind in Ordnung. Aber ich verstehe nicht, warum der obige code ist nicht Rücksendung der type 'unicode'. Kann mir jemand bitte, bitte erklären?

  • Von die Klammern auf Ihrer print es sieht aus wie du bist auf Python 3.x. Ist das richtig?
  • Oh Nein, tut mir Leid, sollte ich angegeben habe, dass ich mit Python 2.7 mit SQLAlchemy version 0.7. Ich habe ein "von Zukunft "importieren " print_function".
InformationsquelleAutor kslnet | 2013-09-25
Schreibe einen Kommentar