Mit SQLite3 in Python versuche ich, eine komprimierte Version eines Codefragments von UTF-8 zu speichern.sqlite3.ProgrammingError: Sie dürfen keine 8-bit Bytestrings verwenden, außer Sie verwenden eine text_factory, die 8-bit Bytestrings interpretieren kann
-Code sieht wie folgt aus:
...
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)))
An welchem Punkt an den Fehler:
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.
Wenn ich 'Text' und nicht als 'Blob' verwenden und nicht komprimiere den HTML-Snippet es funktioniert alles gut (db ist zu groß obwohl). Wenn ich 'Blob' verwende und über Python zlib library komprimiere, erhalte ich die obige Fehlermeldung. Ich schaute mich um, konnte aber keine einfache Antwort finden.
Können Sie erklären, warum das funktioniert? – Moshe
Wenn ich dies tat, war meine Datenbank voll mit base36-Text, der die Datenbank größer machen würde, als den Blob direkt zu speichern. –
Das ist falsch, Sie sollten stattdessen sqlite3.Binary verwenden, wie es in der Dokumentation heißt. – MarioVilas