【发布时间】:2013-08-23 11:07:09
【问题描述】:
使用 SqlAlchemy,我有一些字符串列失败了
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 356: ordinal not in range(128)
因为它们不是 Unicode。
我知道通过执行 my_string.decode('cp1252'),它可以工作,但是是否可以定义一个方法来自动解码从数据库返回的所有字符串。
有了它,调用my_model.my_string,将在返回和解码之前进行处理。
我查看了http://docs.sqlalchemy.org/en/rel_0_8/core/types.html#coercing-encoded-strings-to-unicode,这似乎正是我正在寻找的,但我不知道在哪里告诉 SqlAlchemy 使用CoerceUTF8 类。
【问题讨论】:
-
为什么烧瓶很重要?为什么不使用您正在使用的 DBMS?
-
为什么不让 DB-API 适配器根据连接字符集解码字符串?
-
您已经找到了解决方案。你在那里建造的是一种新的类型。因此,您可以使用
Column(CoercedString...),而不是Column(String...)或Column(Unicode...)。 -
我忘了提到我试图在数据库的连接字符串中指定 UTF-8 字符集,但没有成功。原来,问题是我的数据库编码不是 uft8。 @Javex,将其发布为答案,我会接受。谢谢你们的cmets :)
标签: python unicode sqlalchemy