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

时间:2011-04-20 18:57:35

标签: python unicode sqlalchemy insertion

我有一个带有Unicode列的SQLAlchemy模型。我有时会向其插入unicode值(u'Value'),但有时也会插入ASCII字符串。最好的方法是什么?当我插入带有特殊字符的ASCII字符串时,我收到此警告:

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

我该如何避免这种情况?插入不同类型字符串的正确方法是什么?

2 个答案:

答案 0 :(得分:5)

有几种选择:

  1. 使用warnings.simplefilter('ignore', sqlalchemy.exc.SAWarning)禁用所有SQLAlchemy警告。
  2. 仅使用模块和lineno或消息的更具体的过滤规范禁用此警告,例如warnings.filterwarnings('ignore', '^Unicode type received non-unicode bind param value', sqlalchemy.exc.SAWarning)
  3. 使用String(convert_unicode=True)代替Unicode类型。
  4. 重新思考问题并将代码更改为使用unicode,即使是ASCII字符串。

答案 1 :(得分: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),
)

当然,您不应忘记为URI+"charset=utf8"

附上create_engine function