РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
667 of 711 menu

Атрибут 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:

<+python+> 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() session.expunge(article) print(inspect(article).detached) <-python+>

Результат выполнения кода:

True

Пример

Давайте создадим новый объект без добавления в сессию и проверим, что атрибут detached для него равен False, так как объект находится в состоянии transient:

<+python+> from sqlalchemy import inspect from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] article = Article(title='article') print(inspect(article).detached) print(inspect(article).transient) <-python+>

Результат выполнения кода:

False True

Смотрите также

  • класс InstanceState,
    который хранит состояние экземпляра модели
  • атрибут persistent,
    который показывает привязанность объекта к сессии
  • атрибут transient,
    который показывает, что объект не добавлен в сессию
  • атрибут session,
    который возвращает сессию, связанную с объектом
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить