Menggunakan SQLite3 dengan Python, saya mencoba menyimpan versi terkompresi dari potongan kode UTF-8 HTML.
Kode terlihat seperti ini:
...
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)))
Di mana titik mendapatkan kesalahan:
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.
Jika saya menggunakan 'teks' daripada 'gumpalan' dan tidak mengompres potongan HTML, itu berfungsi dengan baik (meskipun db terlalu besar). Ketika saya menggunakan 'blob' dan kompres melalui pustaka Python zlib, saya mendapatkan pesan kesalahan di atas. Saya melihat sekeliling tetapi tidak dapat menemukan jawaban sederhana untuk yang satu ini.
Menemukan solusinya, saya seharusnya menghabiskan lebih banyak waktu untuk mencari.
Solusinya adalah 'memasukkan' nilai sebagai 'buffer' Python, seperti ini:
c.execute('insert or ignore into blah values (?, ?)',(cid, buffer(zlib.compress(html))))
Semoga ini bisa membantu orang lain.
sumber
Untuk bekerja dengan tipe BLOB, Anda harus terlebih dahulu mengubah string terkompresi zlib Anda menjadi data biner - jika tidak, sqlite akan mencoba memprosesnya sebagai string teks. Ini dilakukan dengan sqlite3.Binary (). Sebagai contoh:
c.execute('insert or ignore into blah values (?, ?)',(cid, sqlite3.Binary(zlib.compress(html))))
sumber
Sintaksis:
5 jenis penyimpanan yang memungkinkan: NULL, INTEGER, TEXT, REAL dan BLOB
BLOB umumnya digunakan untuk menyimpan model acar atau model acar dill
> cur.execute('''INSERT INTO Tablename(Col1, Col2, Col3, Col4) VALUES(?,?,?,?)''', [TextValue, Real_Value, Buffer(model), sqlite3.Binary(model2)]) > conn.commit() > # Read Data: > df = pd.read_sql('SELECT * FROM Model, con=conn) > model1 = str(df['Col3'].values[0])) > model2 = str(df['Col'].values[0]))
sumber
Anda bisa menyimpan nilai menggunakan repr (html) sebagai ganti keluaran mentah dan kemudian menggunakan eval (html) saat mengambil nilai untuk digunakan.
c.execute('insert or ignore into blah values (?, ?)',(1, repr(zlib.compress(html))))
sumber