【问题标题】:Storing Unicode strings to SQLite database using PeeWee使用 PeeWee 将 Unicode 字符串存储到 SQLite 数据库
【发布时间】:2015-06-29 23:07:35
【问题描述】:

与 peewee 合作创建一个简单的 sqlite 数据库,该数据库存储来自已解析 MRSS 提要的项目,特别是视频 URL 和视频标题。

我编写了一个小重复数据删除脚本,用于检查刚刚解析的 URL 和视频标题是否已经在数据库中。我注意到当我将 URL 字符串传递给数据库时,没有问题,重复数据删除工作正常。当我使用sqlitebrowser 之类的应用程序浏览数据库中存储的URL 时,我看到没有Unicode 编码的URL,它们看起来像普通的旧字符串,没有u'

但是,当我传递 unicode 视频标题时 - 像这样:(u'Animals doing the strangest things',) 重复数据删除脚本没有“看到”数据库中的视频标题。解决方案是对视频标题对象进行简单的转换,如下所示:videoName = str(videoName) — 但是,我不知道为什么现在这样。当我使用 sqlitebrowser 浏览数据库中的 videoName 列时,我看到了视频名称,但它们仍然是 Unicode 格式,看起来和以前一样:(u'Animals doing the strangest things',)

知道这里到底发生了什么吗?这与 PeeWee 如何处理字符串序列化的奇怪错误有关吗?

【问题讨论】:

    标签: python string sqlite unicode encoding


    【解决方案1】:

    Peewee 对 CharFieldTextField 都使用 unicode,这意味着您存储在模型中的任何值都将转换为 Python unicode 对象(好吧,在 Py2 中是 unicode,在 Py3 中是 str) .

    数据库驱动程序(sqlite3psycopg2 等)通常负责将 unicode 转换为适当的编码。

    我不确定您描述的是什么错误,但也许您可以共享一些代码来复制它。不过我可以告诉你,peewee 的 unicode 处理已经过测试并且有效。

    【讨论】:

    • 感谢您的回复,您认为在我将其更改为 str(videoName) 之前,PeeWee 不允许我存储存储在 videoName 中的视频名称是什么原因?
    • “不允许”是什么意思?有错误吗?
    • 只有当我将 videoName 中保存的 unicode 字符串更改为 str(videoName) 时,它才会显示在 SQLite 数据库中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    • 2013-08-16
    • 2017-11-23
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多