Атрибут identity класса InstanceState
Атрибут identity класса InstanceState хранит
идентификатор объекта в сессии - обычно это значение
первичного ключа. Если объект еще не был добавлен в сессию
или не прошел flush, атрибут возвращает None.
После успешного flush или загрузки из базы данных атрибут
содержит кортеж со значениями первичного ключа.
Синтаксис
state.identity
Пример
Давайте создадим объект и посмотрим на его identity
до добавления в сессию:
from sqlalchemy import create_engine, inspect
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str]
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
article = Article(title='article')
state = inspect(article)
print(state.identity)
Результат выполнения кода:
None
Пример
Давайте добавим объект в сессию и выполним flush, чтобы получить identity:
from sqlalchemy import create_engine, inspect
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str]
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
article = Article(title='article')
session.add(article)
session.flush()
state = inspect(article)
print(state.identity)
Результат выполнения кода:
(1,)
Пример
Давайте загрузим объект из базы данных и проверим его
identity:
from sqlalchemy import create_engine, inspect, select
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str]
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
session.add(Article(title='article'))
session.commit()
article = session.scalars(select(Article)).first()
state = inspect(article)
print(state.identity)
Результат выполнения кода:
(1,)
Смотрите также
-
класс
InstanceState,
который представляет состояние объекта -
атрибут
session,
который возвращает сессию объекта -
атрибут
object,
который возвращает сам объект -
атрибут
persistent,
который показывает, что объект находится в сессии