正确向SQLAlchemy Unicode列插入字符串的方法

14 投票
2 回答
8038 浏览
提问于 2025-04-16 16:07

我有一个SQLAlchemy模型,其中有一个Unicode类型的字段。有时候我会往里面插入Unicode值(比如u'值'),但有时候也会插入ASCII字符串。请问我该怎么做比较好?当我插入带有特殊字符的ASCII字符串时,会收到这样的警告:

SAWarning: Unicode type received non-unicode bind param value ...

我该如何避免这个问题?插入不同类型的字符串的正确方法是什么呢?

2 个回答

0

你应该这样定义你的表格类和构造函数:

class User(declarative_base()):
    _tablename__ = 'user'
    name = Column(Unicode(200, convert_unicode=False))
    textfield = Column(UnicodeText(convert_unicode=False))

user = Table('user', MetaData(),
Column('name', Unicode(200, convert_unicode=False), nullable=False),
Column('textfield', UnicodeText(convert_unicode=False), nullable=False),
)

当然,你也不要忘了在 create_engine function 中加上 URI+"charset=utf8"

5

这里有几种解决办法:

  1. 可以用 warnings.simplefilter('ignore', sqlalchemy.exc.SAWarning) 来关闭所有的 SQLAlchemy 警告。
  2. 如果只想关闭特定的警告,可以用更具体的过滤器,比如根据模块、行号或消息来设置,例如 warnings.filterwarnings('ignore', '^Unicode type received non-unicode bind param value', sqlalchemy.exc.SAWarning)
  3. 可以用 String(convert_unicode=True) 代替 Unicode 类型。
  4. 重新考虑一下问题,修改代码,让它即使处理 ASCII 字符串时也使用 unicode。

撰写回答