Al usar SQLite3 en Python, intento almacenar una versión comprimida de un fragmento de código HTML UTF-8.sqlite3.ProgrammingError: no debe usar cadenas de bytes de 8 bits a menos que use text_factory que pueda interpretar cadenas de bytes de 8 bits
código es el siguiente:
...
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)))
Momento en el que al llegar el error:
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.
Si uso 'texto' en lugar de 'burbuja' y no comprima el fragmento de HTML , todo funciona bien (sin embargo, db es grande). Cuando uso 'blob' y comprime a través de la biblioteca zlib de Python, aparece el mensaje de error anterior. Miré a mi alrededor pero no pude encontrar una respuesta simple para esta.
¿Podría explicarnos por qué funciona esto? – Moshe
Cuando hice esto, mi base de datos estaba llena de texto base36, lo que haría que la base de datos fuera más grande que almacenar el blob directamente. –
Esto es incorrecto, debería usar sqlite3.Binary en su lugar, como dice la documentación. – MarioVilas