假设我有一个简单的表格:
class MyTable(...):
__tablename__ = 'my_table'
id = ...
unicode_col = Column(UnicodeText())
现在我想从中获取一些数据:
assert type(session.query(MyTable).first().unicode_col) == unicode # this fails
但事实并非如此。它给了我一个 str
回来。
根据this page , this page ,和this page ,我相信它应该给我 unicode
而不是 str
,因为我在连接 URI 中传递 charset=utf8
。
我使用的解决方法是一个简单的类型装饰器,效果很好:
class CoercedUTF8UnicodeText(sqlalchemy.types.TypeDecorator):
impl = UnicodeText
def process_result_value(self, value, dialect):
if isinstance(value, str):
return value.decode('UTF-8')
return value
class MyTable(...):
__tablename__ = 'my_table'
id = ...
unicode_col = Column(CoercedUTF8UnicodeText())
但是 sqlalchemy 不应该首先给我 unicode
对象吗?
其他信息
如果我使用 sqlite 数据库,我会得到 unicode
。
Here's a self-contained runnable example.
我使用的是 Python 2.7.5、sqlalchemy 0.8.2 和 MySQL-Python 1.2.3。
最佳答案
您使用的是 mysql-python 驱动程序吗?我建议尝试使用我们的sql:
pip install oursql
...
create_engine('mysql+oursql://...')
甚至不需要添加 charset=utf8,因为它是 oursql 的默认值。
关于python - SQLAlchemy 的 UnicodeText 列在我的 MySQL 表上给了我一个 str ;不应该是unicode吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21032900/