python - 在 Django/sqlite 中更改 text_factory

标签 python django sqlite pysqlite

我有一个 django 项目,它使用可以由外部工具写入的 sqlite 数据库。文本应该是UTF-8,但在某些情况下会出现编码错误。文本来自外部来源,因此我无法控制编码。是的,我知道我可以在外部源和数据库之间编写一个“包装层”,但我宁愿不必这样做,尤其是因为数据库已经包含很多“坏”数据。

sqlite 中的解决方案是将 text_factory 更改为类似以下内容: lambda x: unicode(x, "utf-8", "忽略")

但是,我不知道如何告诉 Django 模型驱动程序。

我得到的异常是:

'无法解码为带有文本的 UTF-8 列'文本'' 在 /var/lib/python-support/python2.5/django/db/backends/sqlite3/base.py 在执行

我需要以某种方式告诉 sqlite 驱动程序不要尝试将文本解码为 UTF-8(至少不使用标准算法,但它需要使用我的故障安全变体)。

最佳答案

The solution in sqlite is to change the text_factory to something like: lambda x: unicode(x, "utf-8", "ignore")

However, I don't know how to tell the Django model driver this.

你试过吗

from django.db import connection
connection.connection.text_factory = lambda x: unicode(x, "utf-8", "ignore")

在运行任何查询之前?

关于python - 在 Django/sqlite 中更改 text_factory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2744632/

相关文章:

python - 定义 PyParsing 字段名称的简写

django - MultipleObjectsReturned at/contact-agent/get() 返回了多个属性 - 它返回了 2

iphone - 如果特定列值为 NULL,则 SQLite 查询从表中选择列

python - 在 Python 中使用计数器重复创建文件

python - Pygame:国际象棋中的网格/棋盘对齐

django 1.5 扩展默认用户模型或替换它

python - 保存对象时“MyModel”对象不可迭代(Django)

java - 有没有一种方法可以使用 WHERE 子句查询 SQLite 数据库,但该子句并不总是设置所有属性?

r - 如何更改 sqlite 在 Ubuntu Linux R 上创建 etilqs 文件的临时文件夹?

python - 使用列表在 python 中进行递归时出错