Класс Identity
Класс Identity представляет конструкцию
IDENTITY и используется в параметре
Identity при определении колонки. Он
указывает базе данных генерировать значения
автоматически. Первым параметром передается
начальное значение, а параметром always
можно запретить ручное заполнение колонки.
Синтаксис
Identity(start, [increment], [always])
Пример
Давайте создадим таблицу articles с
identity-колонкой:
from sqlalchemy import Identity, String, create_engine, insert
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(Identity(start=1), primary_key=True)
title: Mapped[str] = mapped_column(String)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with engine.connect() as conn:
conn.execute(insert(Article).values(title='article'))
res = conn.execute(Article.__table__.select()).fetchall()
print(res)
Результат выполнения кода:
[(1, 'article')]
Пример
Давайте зададим начальное значение и шаг
инкремента через параметры start и
increment:
from sqlalchemy import Identity, String, create_engine, insert
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(Identity(start=100, increment=10), primary_key=True)
title: Mapped[str] = mapped_column(String)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with engine.connect() as conn:
conn.execute(insert(Article).values(title='article'))
res = conn.execute(Article.__table__.select()).fetchall()
print(res)
Результат выполнения кода:
[(100, 'article')]
Пример
Давайте включим режим always, при котором
база данных всегда сама генерирует значение:
from sqlalchemy import Identity, String, create_engine, insert
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(Identity(always=True), primary_key=True)
title: Mapped[str] = mapped_column(String)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with engine.connect() as conn:
conn.execute(insert(Article).values(title='article'))
res = conn.execute(Article.__table__.select()).fetchall()
print(res)
Результат выполнения кода:
[(1, 'article')]
Смотрите также
-
класс
Computed,
который задает вычисляемую колонку -
класс
FetchedValue,
который помечает значение, получаемое от базы -
класс
PrimaryKeyConstraint,
который задает первичный ключ таблицы -
класс
Constraint,
который является базой для всех ограничений