我有一个使用 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/