Атрибут detached
Атрибут detached класса InstanceState
возвращает булево значение True или False.
Он показывает, был ли объект когда-либо привязан
к сессии, а затем отсоединен от нее.
Значение True означает, что объект имеет
идентификатор в базе данных, но больше не связан
ни с какой активной сессией.
Для получения состояния используется функция
inspect, которая принимает экземпляр модели.
Синтаксис
from sqlalchemy import inspect
state = inspect(instance)
state.detached
Пример
Давайте создадим объект и проверим его состояние
после закрытия сессии. Сначала объект находится
в состоянии persistent, а после закрытия
сессии становится detached:
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.commit()
print(inspect(article).detached)
print(inspect(article).detached)
Результат выполнения кода:
False
True
Пример
Давайте отсоединим объект от сессии вручную
методом expunge и проверим атрибут
detached:
Результат выполнения кода:
True
Пример
Давайте создадим новый объект без добавления
в сессию и проверим, что атрибут detached
для него равен False, так как объект
находится в состоянии transient:
Результат выполнения кода:
False
True
Смотрите также
-
класс
InstanceState,
который хранит состояние экземпляра модели -
атрибут
persistent,
который показывает привязанность объекта к сессии -
атрибут
transient,
который показывает, что объект не добавлен в сессию -
атрибут
session,
который возвращает сессию, связанную с объектом