Używając SQLite3 w Pythonie, próbuję przechowywać skompresowaną wersję fragmentu kodu HTML UTF-8.sqlite3.ProgrammingError: Nie wolno używać 8-bitowych bytestrings, chyba że używasz text_factory, który może interpretować 8-bitowe bytestrings
Kod wygląda następująco:
...
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)))
W tym momencie co pojawia się błąd:
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.
Jeśli użyję 'text' zamiast 'blob' i nie ściskać fragment kodu HTML , działa dobrze (db jest do dużych). Kiedy używam "blob" i kompresuję przez bibliotekę zlib Pythona, pojawia się powyższy komunikat o błędzie. Rozejrzałem się, ale nie mogłem znaleźć prostej odpowiedzi.
Czy możesz wyjaśnić, dlaczego to działa? – Moshe
Kiedy to zrobiłem, moja baza danych była pełna tekstu base36, co spowodowałoby, że baza danych byłaby większa niż bezpośrednio przechowująca blob. –
To jest nieprawidłowe, powinieneś używać sqlite3.Binary zamiast tego, jak mówi dokumentacja. – MarioVilas