Сообщить об ошибке.

Объект Blob() модуля sqlite3 в Python

Чтение и запись данных в поле SQLite с типом BLOB

Объект Blob (новое в Python 3.11) - это файлоподобный объект, который может читать и записывать данные в SQLite BLOB. Объект Blob создается методом connect.blobopen() (добавлен в Python 3.11).

  • Чтобы получить размер (количество байтов) большого двоичного объекта, необходимо вызвать len(blob).
  • Для прямого доступа к данным большого двоичного объекта можно использовать индексы и срезы.

Объект Blob можно использовать в качестве диспетчера контекста, для обеспечения надежного закрытия дескриптора Blob после использования.

Например:

con = sqlite3.connect(":memory:")
con.execute("CREATE TABLE test(blob_col blob)")
con.execute("INSERT INTO test(blob_col) VALUES(zeroblob(13))")

# Записываем в `blob`, используя две операции записи:
with con.blobopen("test", "blob_col", 1) as blob:
    blob.write(b"hello, ")
    blob.write(b"world.")
    # Измените первый и последний байты `blob`
    blob[0] = ord("H")
    blob[-1] = ord("!")

# Прочитайте содержимое `blob`
with con.blobopen("test", "blob_col", 1) as blob:
    greeting = blob.read()

print(greeting)
# "b'Hello, world!'"

Методы объекта Blob модуля sqlite3:

Blob.close():

Метод Blob.close() закрывает объект Blob.

С этого момента объект Blob будет непригоден для использования. Будет вызвано исключение, если будет предпринята какая-либо дальнейшая операция с большим двоичным объектом.

Blob.read(length=- 1, /):

Метод Blob.read() прочитает length байтов данных из объекта Blob с текущей позиции смещения.

  • Если достигнут конец Blob, то будут возвращены данные до EOF.
  • Если length не указана или имеет отрицательное значение, то Blob.read() будет читать до конца.

Blob.write(data, /):

Метод Blob.write() запишет данные в объект Blob с текущей позиции смещения. Эта функция не может изменить длину объекта Blob. Запись за конец Blob вызовет ValueError.

Blob.tell():

Метод Blob.tell() возвращает текущую позицию смещения к объекту Blob.

Blob.seek(offset, origin=os.SEEK_SET, /):

Метод Blob.seek() устанавливает текущую позицию смещения offset объекту Blob.

Аргумент origin по умолчанию имеет значение os.SEEK_SET (абсолютное позиционирование). Другими значениями для источника являются os.SEEK_CUR (поиск относительно текущей позиции) и os.SEEK_END (поиск относительно конца).