gpt4 book ai didi

python - 为什么带有 charset=utf8 的 SQLAlchemy create_engine 返回 python 类型 而不是类型

转载 作者:可可西里 更新时间:2023-11-01 07:06:18 26 4
gpt4 key购买 nike

使用 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具体举例

#set client encoding to utf8; all strings come back as 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”类型。有人可以解释一下吗?

最佳答案

当发现我成功运行多次的不同脚本不再工作时,终于找到了答案。

我已将数据库中的排序规则从 utf8_general_ci 更改为 utf8_bin。 MySQLdb 1.2.3 中有一个错误导致 utf8_bin 字符串无法被识别为文本,因此没有进行 unicode 转换。这在 MySQLdb 1.2.4 中已修复。

https://sourceforge.net/p/mysql-python/bugs/289/

关于python - 为什么带有 charset=utf8 的 SQLAlchemy create_engine 返回 python 类型 <str> 而不是类型 <unicode>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19015098/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com