【问题标题】:pysqlite DatabaseError: You must not use 8-bit bytestrings unless you use a text_factorypysqlite DatabaseError:除非使用 text_factory,否则不得使用 8 位字节串
【发布时间】:2013-06-19 22:51:23
【问题描述】:

我正在尝试将我正在通过 csv 文件读取的文档字符串插入到具有 (children's) 等字符的 sqlite 数据库中,它会引发以下错误:

DatabaseError: 你不能使用 8 位字节串,除非你使用 text_factory 可以解释 8 位字节串(如 text_factory = 字符串)。强烈建议您直接切换您的 应用于 Unicode 字符串。

在插入文档之前,我确保将字符串转换为 unistring。

unicode('儿童', 'unicode-escape')

我正在使用 Django ORM 来保存数据。有什么办法可以摆脱这种情况吗?

【问题讨论】:

    标签: django sqlite django-models pysqlite


    【解决方案1】:

    导致错误的 .execute() 参数是 Python 字节字符串,而不是像你说的那样的 unicode 字符串。解决方案:改为创建一个 unicode 字符串:unicode(your_data, your_encoding)。对于大多数 csv 文件,编码将是“l​​atin-1”或“uft-8”。

    使用“unicode-escape”几乎肯定是错误的。根据文档 (https://docs.python.org/2/library/codecs.html),它是一种特定于 Python 的编码,旨在“在 Python 源代码中生成适合作为 Unicode 文字的字符串”。

    【讨论】:

      猜你喜欢
      • 2011-08-02
      • 1970-01-01
      • 2011-03-26
      • 1970-01-01
      • 2011-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多