我有一个 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/