正确向SQLAlchemy Unicode列插入字符串的方法
我有一个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
这里有几种解决办法:
- 可以用
warnings.simplefilter('ignore', sqlalchemy.exc.SAWarning)
来关闭所有的 SQLAlchemy 警告。 - 如果只想关闭特定的警告,可以用更具体的过滤器,比如根据模块、行号或消息来设置,例如
warnings.filterwarnings('ignore', '^Unicode type received non-unicode bind param value', sqlalchemy.exc.SAWarning)
。 - 可以用
String(convert_unicode=True)
代替Unicode
类型。 - 重新考虑一下问题,修改代码,让它即使处理 ASCII 字符串时也使用 unicode。