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

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

Атрибут pending класса InstanceState возвращает булево значение True или False, которое показывает, находится ли объект в состоянии ожидания. Объект становится pending после добавления в сессию через add, но до выполнения flush. В этом состоянии объект еще не имеет записи в базе данных, но уже связан с сессией. Атрибут доступен через inspect для любого экземпляра модели.

Синтаксис

state.pending

Пример

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

from sqlalchemy import create_engine, String from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session from sqlalchemy import inspect 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 = inspect(article) print(state.pending)

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

True

Пример

Давайте проверим, что после выполнения flush атрибут pending становится False, так как объект переходит в состояние persistent:

from sqlalchemy import create_engine, String from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session from sqlalchemy import inspect 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 = inspect(article) print(state.pending) session.flush() print(state.pending)

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

True False

Пример

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

from sqlalchemy import create_engine, String from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session from sqlalchemy import inspect 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 = inspect(article) print(state.pending)

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

False

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

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