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

发布于 2024-11-02 07:01:22 字数 261 浏览 5 评论 0原文

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

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

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

I have a SQLAlchemy model with a Unicode column. I sometimes insert unicode values to it (u'Value'), but also sometimes insert ASCII strings. What is the best way to go about this? When I insert ASCII strings with special characters I get this warning:

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

How do I avoid this? What is the proper way to insert my different types of strings?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

安稳善良 2024-11-09 07:01:22

有几个选项:

  1. 使用 warnings.simplefilter('ignore', sqlalchemy.exc.SAWarning) 禁用所有 SQLAlchemy 警告。
  2. 仅通过模块和 lineno 或消息使用更具体的过滤器规范禁用此警告,例如 warnings.filterwarnings('ignore', '^Unicode 类型收到非 unicode 绑定参数值', sqlalchemy.exc.SAWarning)
  3. 使用 String(convert_unicode=True) 而不是 Unicode 类型。
  4. 重新思考问题并更改代码以使用 unicode,即使对于 ASCII 字符串也是如此。

Thre are several options:

  1. Disable all SQLAlchemy warnings with warnings.simplefilter('ignore', sqlalchemy.exc.SAWarning).
  2. Disable only this warning with more specific filter spec by module and lineno or message, e.g. warnings.filterwarnings('ignore', '^Unicode type received non-unicode bind param value', sqlalchemy.exc.SAWarning).
  3. Use String(convert_unicode=True) instead of Unicode type.
  4. Rethink the problem and change your code to use unicode even for ASCII strings.
隔岸观火 2024-11-09 07:01:22

您应该这样定义表类和构造函数:

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 函数 附加 URI+"charset=utf8"

You should define your table class and constructor as such:

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),
)

Of course, you should not forget to attach URI+"charset=utf8" for create_engine function

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文