Тип LargeBinary
Тип LargeBinary используется для хранения
бинарных данных в базе данных. Он подходит для
сохранения файлов, изображений, хешей, сериализованных
объектов и любых других данных, представленных в виде
байтов. При создании столбца можно указать необязательный
параметр length, который задает максимальную длину
значения в байтах.
Синтаксис
LargeBinary(length=None)
Пример
Давайте создадим таблицу с полем бинарного типа и запишем в нее байтовые данные:
from sqlalchemy import create_engine, LargeBinary, Integer, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(Integer, primary_key=True)
title: Mapped[str] = mapped_column(String)
data: Mapped[bytes] = mapped_column(LargeBinary)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
article = Article(title='article', data=b'\x00\x01\x02\x03')
session.add(article)
session.commit()
res = session.query(Article).first()
print(res.title)
print(res.data)
Результат выполнения кода:
"article"
"b'\\x00\\x01\\x02\\x03'"
Пример
Давайте сохраним в поле LargeBinary текстовые
данные, закодированные в байты, и прочитаем их обратно:
from sqlalchemy import create_engine, LargeBinary, Integer, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(Integer, primary_key=True)
title: Mapped[str] = mapped_column(String)
payload: Mapped[bytes] = mapped_column(LargeBinary(255))
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
article = Article(title='article', payload='user'.encode('utf-8'))
session.add(article)
session.commit()
res = session.query(Article).first()
print(res.payload.decode('utf-8'))
Результат выполнения кода:
"user"
Пример
Давайте посмотрим, какой SQL-запрос генерируется при
создании таблицы с полем LargeBinary:
from sqlalchemy import create_engine, LargeBinary, Integer, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
from sqlalchemy.schema import CreateTable
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(Integer, primary_key=True)
title: Mapped[str] = mapped_column(String)
content: Mapped[bytes] = mapped_column(LargeBinary)
engine = create_engine('sqlite:///:memory:')
print(CreateTable(Article.__table__).compile(engine))
Итоговый SQL запрос:
CREATE TABLE articles (
id INTEGER NOT NULL,
title VARCHAR NOT NULL,
content BLOB NOT NULL,
PRIMARY KEY (id)
)
Смотрите также
-
тип
BLOB,
который также хранит бинарные данные -
тип
PickleType,
который сериализует объекты через pickle -
тип
String,
который хранит текстовые данные -
тип
Text,
который хранит текст неограниченной длины