python - SQLAlchemy 的 UnicodeText 列在我的 MySQL 表上给了我一个 str ;不应该是unicode吗?

标签 python mysql unicode sqlalchemy

假设我有一个简单的表格:

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/

相关文章:

python - PySpark HDFS 数据流读/写

php - 学说关联映射和 arrayCollection 持续错误

php - 当我尝试通过 PHP 创建数据库并设置用户权限时,MySQL 语法错误

具有 Firebase Auth 和 MySQL 后端的 Android native 应用

python - 确定文本编码

python - Quickfix:如何在 Python 中使用 SSL

python - 如何使用 Smartsheets API Python 检索文件夹树

javascript - 我的第一个 casper.js 脚本是从 python 调用的

string - Swift - 用空格替换字符串中的表情符号

html - 使用非表情符号版本的 unicode 字符(highcharts 和纯 html)