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

Атрибут expired класса InstanceState

Атрибут expired класса InstanceState возвращает логическое значение, которое указывает, помечен ли объект как устаревший. Когда объект находится в состоянии expired, его загруженные атрибуты сброшены, и при следующем обращении к ним SQLAlchemy выполнит запрос к базе данных для их обновления. Объект становится устаревшим после вызова метода expire у сессии или после коммита, если включена опция expire_on_commit. Атрибут не принимает параметров и доступен только для чтения.

Синтаксис

state.expired

Пример

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

from sqlalchemy import create_engine, String 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] = 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 = article._sa_instance_state print(state.expired)

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

False

Пример

Давайте сохраним объект, а затем вызовем метод expire и посмотрим, как изменится значение атрибута:

from sqlalchemy import create_engine, String 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] = 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 = article._sa_instance_state print(state.expired) session.expire(article) print(state.expired)

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

False True

Пример

Давайте убедимся, что после обращения к атрибуту устаревшего объекта его значение перезагружается и флаг expired сбрасывается:

from sqlalchemy import create_engine, String 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] = 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 = article._sa_instance_state session.expire(article) print(state.expired) print(article.title) print(state.expired)

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

True "article" False

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

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