Функция instance_state
Функция instance_state возвращает объект
InstanceState для переданного экземпляра
модели. Первым параметром функция принимает
экземпляр ORM-объекта. Объект состояния
содержит служебную информацию о записи:
идентификатор, историю атрибутов, статус
загрузки и связи с сессией.
Синтаксис
instance_state(instance)
Пример
Давайте создадим модель и получим состояние экземпляра после его добавления в сессию:
from sqlalchemy import create_engine, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session
from sqlalchemy.insp import instance_state
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str] = mapped_column(String(50))
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
article = Article(title='article')
session.add(article)
state = instance_state(article)
print(state)
Результат выполнения кода:
"<sqlalchemy.orm.state.InstanceState object at 0x...>"
Пример
Давайте посмотрим на идентификатор записи
через атрибут identity объекта состояния
после сброса в базу:
from sqlalchemy import create_engine, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session
from sqlalchemy.insp import instance_state
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str] = mapped_column(String(50))
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 = instance_state(article)
print(state.identity)
print(state.persistent)
Результат выполнения кода:
(1,)
True
Пример
Давайте проверим состояние отсоединенного экземпляра после закрытия сессии:
from sqlalchemy import create_engine, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session
from sqlalchemy.insp import instance_state
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str] = mapped_column(String(50))
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
article = Article(title='article')
session.add(article)
session.commit()
state = instance_state(article)
print(state.detached)
print(state.detached)
Результат выполнения кода:
False
True
Смотрите также
-
функцию
inspect,
которая возвращает инспектор для объекта -
функцию
identity_key,
которая строит ключ идентичности записи -
класс
Session,
который управляет жизненным циклом объектов -
класс
DeclarativeBase,
который служит базой для декларативных моделей