我有一个使用SQLAlchemy引擎执行的SQL查询:
result = engine.execute('SELECT utf_8_field FROM table')
数据库是MySQL,列类型是使用UTF8编码的文本。即使我在创建引擎时设置了选项convert_unicode=True,返回的utf_8_field的类型也是"str“。现在发生的情况是,如果我的字符串中有一个像'é‘这样的字符(它不是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表对象,这就是我使用execute命令的原因。
有什么想法吗?
发布于 2012-05-30 23:24:25
如果您希望自动转换数据,则应在创建引擎时使用specify the charset:
create_engine('mysql+mysqldb:///mydb?charset=utf8')
单独设置use_unicode
并不能告诉sqlalchemy使用哪个字符集。
https://stackoverflow.com/questions/10819192
复制相似问题