Python 3.11+sqlite3понятие
sqlite3.Blob
соединение и запросы
Файлоподобный объект для чтения и записи значения BLOB прямо в базе, по кусочкам. Создаётся методом Connection.blobopen().
Синтаксис
with conn.blobopen(table, column, rowid) as blob: blob.write(data)
Размер Blob менять нельзя: запись за конец даёт ValueError, поэтому место резервируют заранее — INSERT ... VALUES (zeroblob(n)). Строку указывают по rowid, а не по условию WHERE. Нужен для больших двоичных данных, которые не хочется целиком держать в памяти; для маленьких проще обычный SELECT и bytes. Открывайте через with — так дескриптор закроется сам.
Примеры
import sqlite3
conn = sqlite3.connect(':memory:')
conn.execute('CREATE TABLE files(data BLOB)')
conn.execute('INSERT INTO files VALUES (zeroblob(5))')
with conn.blobopen('files', 'data', 1) as blob:
blob.write(b'hello')
print(len(blob), blob[1:3]) # → 5 b'el'
print(conn.execute('SELECT data FROM files').fetchone()) # → (b'hello',)
conn.close()
import sqlite3
conn = sqlite3.connect(':memory:')
conn.execute('CREATE TABLE files(data BLOB)')
conn.execute("INSERT INTO files VALUES (x'0102')")
with conn.blobopen('files', 'data', 1) as blob:
try:
blob.write(b'abc')
except ValueError as e:
print(e) # → data longer than blob length
conn.close()
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности