Метод next_value
Метод next_value класса Sequence
возвращает SQL-выражение, которое при выполнении
запроса извлекает следующее значение
последовательности. Метод не принимает
обязательных параметров и возвращает объект
Sequence.next_value, пригодный для
использования в конструкции select.
Полученное выражение можно применять как
значение по умолчанию для колонки или
передавать в запрос напрямую.
Синтаксис
Sequence('name').next_value()
Пример
Давайте создадим последовательность и получим выражение для следующего значения:
from sqlalchemy import Sequence
seq = Sequence('article_id_seq')
expr = seq.next_value()
print(expr)
Результат выполнения кода:
"next_value(article_id_seq)"
Пример
Давайте выполним выражение next_value
в запросе к базе данных SQLite:
from sqlalchemy import create_engine, Sequence, select
engine = create_engine('sqlite:///:memory:')
seq = Sequence('article_id_seq')
with engine.connect() as conn:
conn.execute(seq.create())
res = conn.execute(select(seq.next_value())).scalar()
print(res)
Результат выполнения кода:
1
Пример
Давайте используем next_value как
значение по умолчанию для колонки id
в модели:
from sqlalchemy import Sequence
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
article_id_seq = Sequence('article_id_seq')
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(
article_id_seq,
server_default=article_id_seq.next_value(),
primary_key=True,
)
title: Mapped[str]
text: Mapped[str]