sqlite3. ProgrammingError: Вы не должны использовать 8-разрядные строки байтов, если Вы не используете text_factory, который может интерпретировать 8-разрядные строки байтов

Используя SQLite3 в Python, я пытаюсь сохранить сжатую версию отрывка HTML-кода UTF-8.

Код похож на это:

...
c = connection.cursor()
c.execute('create table blah (cid integer primary key,html blob)')
...
c.execute('insert or ignore into blah values (?, ?)',(cid, zlib.compress(html)))

В которой точке в получают ошибку:

sqlite3.ProgrammingError: You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings (like text_factory = str). It is highly recommended that you instead just switch your application to Unicode strings.

Если я использую 'текст', а не 'блоб' и не сжимаю отрывок HTML, он работает весь штраф (дб к большому хотя). Когда я использую 'блоб' и сжатие с помощью Python zlib библиотека, я получаю вышеупомянутое сообщение об ошибке. Я озирался, но не мог найти простой ответ для этого.

87
задан R. Hill 6 August 2010 в 15:34
поделиться

1 ответ

Нашел решение, мне следовало потратить еще немного времени на поиски.

Решение состоит в том, чтобы «преобразовать» значение в «буфер» Python, например:

c.execute('insert or ignore into blah values (?, ?)',(cid, buffer(zlib.compress(html))))

Надеюсь, это поможет кому-то другому.

35
ответ дан 24 November 2019 в 07:48
поделиться
Другие вопросы по тегам:

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