Измените text_factory в Django/sqlite

У меня есть django проект, который использует sqlite базу данных, которая может быть записана во внешним инструментом. Текст, как предполагается, является UTF-8, но в некоторых случаях в кодировании будут ошибки. Текст из внешнего источника, таким образом, я не могу управлять кодированием. Да, я знаю, что мог записать "переносящийся слой" между внешним источником и базой данных, но я предпочитаю не иметь необходимость сделать это, тем более, что база данных уже содержит много "плохих" данных.

Решение в sqlite состоит в том, чтобы изменить text_factory на что-то как: lambda x: unicode(x, "utf-8", "ignore")

Однако я не знаю, как сказать драйвер модели Django это.

Исключение, которое я получаю:

'Could not decode to UTF-8 column 'Text' with text' in /var/lib/python-support/python2.5/django/db/backends/sqlite3/base.py in execute

Так или иначе я должен сказать sqlite драйверу не пытаться декодировать текст как UTF-8 (по крайней мере, не использующий стандартный алгоритм, но он должен использовать мой отказоустойчивый вариант).

6
задан Krumelur 30 April 2010 в 21:00
поделиться

2 ответа

Решение в sqlite - изменить text_factory на что-то вроде: лямбда x: unicode (x, "utf-8", "ignore")

Однако я не знаю, как сообщить об этом драйверу модели Django.

Вы пробовали

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

перед выполнением каких-либо запросов?

9
ответ дан 9 December 2019 в 22:30
поделиться

Загрузите данные с помощью одной из волшебных функций str из Django:

smart_str(s, encoding='utf-8', strings_only=False, errors='strict')

или

smart_unicode(s, encoding='utf-8', strings_only=False, errors='strict')
0
ответ дан 9 December 2019 в 22:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: