Атрибут session класса InstanceState
Атрибут session класса InstanceState
возвращает объект Session, к которому
привязан конкретный экземпляр модели. Если
экземпляр находится в состояниях transient
или detached, атрибут возвращает
None. Для состояний pending,
persistent и deleted атрибут
указывает на активную сессию. Получить объект
InstanceState можно с помощью функции
inspect.
Синтаксис
inspect(instance).session
Пример
Давайте создадим объект модели без сессии
и проверим атрибут session:
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]
text: Mapped[str]
status: Mapped[str]
num: Mapped[int]
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
article = Article(title='article', text='text', status='draft', num=1)
state = inspect(article)
print(state.session)
Результат выполнения кода:
None
Пример
Давайте добавим объект в сессию и снова
проверим атрибут session:
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]
text: Mapped[str]
status: Mapped[str]
num: Mapped[int]
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
article = Article(title='article', text='text', status='draft', num=1)
session.add(article)
state = inspect(article)
print(state.session is session)
Результат выполнения кода:
True
Пример
Давайте проверим атрибут session
после отсоединения объекта от сессии:
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]
text: Mapped[str]
status: Mapped[str]
num: Mapped[int]
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
article = Article(title='article', text='text', status='draft', num=1)
session.add(article)
session.commit()
session.expunge(article)
state = inspect(article)
print(state.session)
Результат выполнения кода:
None
Смотрите также
-
класс
InstanceState,
который хранит состояние экземпляра модели -
атрибут
object,
который возвращает сам экземпляр модели -
атрибут
persistent,
который показывает, сохранен ли объект в базе -
атрибут
detached,
который показывает, отсоединен ли объект от сессии