首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >UTF-8列的SQLAlchemy结果是'str‘类型,为什么?

UTF-8列的SQLAlchemy结果是'str‘类型,为什么?
EN

Stack Overflow用户
提问于 2012-05-30 23:15:07
回答 1查看 24.3K关注 0票数 23

我有一个使用SQLAlchemy引擎执行的SQL查询:

代码语言:javascript
复制
result = engine.execute('SELECT utf_8_field FROM table')

数据库是MySQL,列类型是使用UTF8编码的文本。即使我在创建引擎时设置了选项convert_unicode=True,返回的utf_8_field的类型也是"str“。现在发生的情况是,如果我的字符串中有一个像'é‘这样的字符(它不是7位ASCII码,但在扩展ASCII码集中),我在尝试执行以下命令时会得到一个UnicodeDecodeError:

代码语言:javascript
复制
utf_8_field.encode("utf-8")

确切的错误是:

代码语言:javascript
复制
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 1: ordinal not in range(128)

研究这一点时,我发现str.encode不支持扩展的ASCII字符集!我觉得这真的很奇怪,但这是另一个问题。

我不明白的是为什么SQLAlchemy不给我unicode字符串。我之前使用的是DB-API,运行得很好。我的表也还没有SQLAlchemy表对象,这就是我使用execute命令的原因。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-30 23:24:25

如果您希望自动转换数据,则应在创建引擎时使用specify the charset

代码语言:javascript
复制
create_engine('mysql+mysqldb:///mydb?charset=utf8')

单独设置use_unicode并不能告诉sqlalchemy使用哪个字符集。

票数 48
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10819192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档