Python Glossary English

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Сообщить о неточности