使用 Python 2.7 和 SQLAlchemy 0.7,我使用以下命令连接到 MySQL 数据库:
engine = create_engine('mysql://username:password@host/dbname?charset=utf8',echo=False)
根据 SQLAlchemy 文档,设置 charset=utf8 自动意味着 use_unicode=1,因此所有字符串都应以 unicode 形式返回。 http://docs.sqlalchemy.org/en/rel_0_7/dialects/mysql.html具体给出了例子
#设置客户端编码为utf8;所有字符串都以 unicode create_engine('mysql+mysqldb:///mydb?charset=utf8') 形式返回
那么,为什么当我在映射类中查询文本字段时,该字段最终会以“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))
输出是
<type 'str'>
如果我只是接受它并在使用它之前解码字符串,那么一切都很好。但我不明白为什么上面的代码没有返回类型“unicode”。有人可以请解释一下吗?