Тип Uuid
Тип Uuid создает колонку для хранения
значений типа UUID (Universally Unique Identifier).
Первый параметр as_uuid определяет,
будут ли значения возвращаться как объекты
uuid.UUID или как строки. По умолчанию
параметр равен True. Тип автоматически
подбирает нативный тип UUID для используемой
СУБД, например UUID в PostgreSQL
или CHAR(32) в SQLite.
Синтаксис
Uuid(as_uuid=True, native_uuid=True)
Пример
Давайте создадим таблицу с полем UUID и вставим в нее запись:
import uuid
from sqlalchemy import create_engine, Uuid, String
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, default=uuid.uuid4)
title: Mapped[str] = mapped_column(String)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
article = Article(title='article')
session.add(article)
session.commit()
print(article.id)
Результат выполнения кода:
"4b8c1f2e-9a3d-4c5b-8e7f-1a2b3c4d5e6f"
Пример
Давайте сохраним UUID как строку, указав
параметр as_uuid=False:
import uuid
from sqlalchemy import create_engine, Uuid, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[str] = mapped_column(Uuid(as_uuid=False), primary_key=True, default=lambda: str(uuid.uuid4()))
title: Mapped[str] = mapped_column(String)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
article = Article(title='article')
session.add(article)
session.commit()
print(article.id)
print(type(article.id))
Результат выполнения кода:
"4b8c1f2e-9a3d-4c5b-8e7f-1a2b3c4d5e6f"
<class 'str'>
Пример
Давайте выполним запрос на выборку статьи по ее UUID:
import uuid
from sqlalchemy import create_engine, Uuid, String, 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, default=uuid.uuid4)
title: Mapped[str] = mapped_column(String)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
article = Article(title='article')
session.add(article)
session.commit()
article_id = article.id
res = session.scalars(select(Article).where(Article.id == article_id)).one()
print(res.title)
Результат выполнения кода:
"article"
Смотрите также
-
тип
UUID,
который является диалектным синонимом Uuid -
тип
String,
который хранит строковые значения -
тип
LargeBinary,
который хранит бинарные данные -
тип
Integer,
который хранит целые числа