Поле Uuid
Поле Uuid представляет тип данных
для хранения универсальных уникальных
идентификаторов (UUID). Первым параметром
передается флаг as_uuid, который
определяет, будут ли значения возвращаться
как объекты uuid.UUID или как строки.
Тип Uuid автоматически подбирает
нативный тип UUID для используемой СУБД.
Синтаксис
Uuid(as_uuid=True)
Пример
Давайте создадим модель с полем типа Uuid
и вставим в нее запись:
import uuid
from sqlalchemy import create_engine, Uuid, select
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True)
title: Mapped[str]
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
article_id = uuid.uuid4()
with Session(engine) as session:
session.add(Article(id=article_id, title='article'))
session.commit()
res = session.scalar(select(Article.id))
print(res)
print(type(res))
Результат выполнения кода:
"c2f1b9e0-7a4d-4c1e-9f3a-8b6d2e5f1a7c"
"<class 'uuid.UUID'>"
Пример
Давайте отключим параметр as_uuid,
чтобы значения возвращались в виде строк:
import uuid
from sqlalchemy import create_engine, Uuid, select
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[uuid.UUID] = mapped_column(Uuid(as_uuid=False), primary_key=True)
title: Mapped[str]
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
article_id = uuid.uuid4()
with Session(engine) as session:
session.add(Article(id=article_id, title='article'))
session.commit()
res = session.scalar(select(Article.id))
print(res)
print(type(res))
Результат выполнения кода:
"c2f1b9e0-7a4d-4c1e-9f3a-8b6d2e5f1a7c"
"<class 'str'>"
Пример
Давайте посмотрим, какой SQL-запрос генерируется при создании таблицы:
import uuid
from sqlalchemy import create_engine, Uuid
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
from sqlalchemy.schema import CreateTable
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[uuid.UUID] = mapped_column(Uuid, primary_key=True)
title: Mapped[str]
engine = create_engine('sqlite:///:memory:')
print(CreateTable(Article.__table__).compile(engine))
Итоговый SQL запрос:
CREATE TABLE articles (
id CHAR(32) NOT NULL,
title VARCHAR NOT NULL,
PRIMARY KEY (id)
)
Смотрите также
-
тип
UUID,
который является диалект-независимым типом UUID -
тип
String,
который хранит строковые значения -
тип
LargeBinary,
который хранит бинарные данные -
тип
Integer,
который хранит целые числа