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

标签 python mysql string encoding sqlalchemy

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

result = engine.execute('SELECT utf_8_field FROM table')

数据库是 MySQL,列类型是 UTF-8 编码的 TEXT。返回的 utf_8_field 的类型是“str”,即使我在创建引擎时设置了选项 convert_unicode=True。现在发生的情况是,如果我的字符串中有一个像“é”这样的字符(不是 7 位 ASCII,而是在扩展的 ASCII 集中),我在尝试执行此操作时会收到 UnicodeDecodeError:

utf_8_field.encode("utf-8")

确切的错误是:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 1: ordinal not in range(128)

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

我不明白为什么 SQLAlchemy 没有给我一个 unicode 字符串。我以前使用 DB-API,效果很好。我的表还没有 SQLAlchemy 表对象,这就是我使用执行命令的原因。

有什么想法吗?

最佳答案

如果你想自动转换数据,你应该specify the charset创建引擎时:

create_engine('mysql+mysqldb:///mydb?charset=utf8')

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

关于python - UTF-8 列的 SQLAlchemy 结果是 'str' 类型,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10819192/

相关文章:

java - 如果字符串包含两个带有 IgnoreCase 的单词之一

string - 优化 F# 字符串连接

python - 使用返回列表的 fixture 参数化 pytest 函数的最佳方法是什么?

Python导入的好习惯?

python - 将 xml.etree.ElementTree 转换为字符串引发 "TypeError: argument of type ' int' 不可迭代”

mysql - 用转义字符替换字符串

python - 嗨,我有一项赋值,可以使用lambda并在python中映射,从而将一个数字的所有数字相加

php - WordPress:$wpdb->get_results();第一次循环后返回错误结果

MySQL触发器插入到另一个表

python - 在Python中给定一个包含该子字符串的字符串,查找该子字符串的所有索引