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

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

Атрибут transient класса InstanceState возвращает булево значение True или False. Он указывает, является ли объект транзитным, то есть еще не связанным с сессией и не сохраненным в базе данных. Такой объект существует только в памяти Python. Параметров атрибут не принимает.

Транзитное состояние возникает сразу после создания объекта модели. Пока объект не добавлен в сессию методом add, он остается транзитным. После добавления объект переходит в состояние pending, а после сброса в базу - в persistent.

Синтаксис

InstanceState.transient

Пример

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

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) article = Article(title='article') state = inspect(article) print(state.transient)

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

True

Пример

Давайте добавим объект в сессию и посмотрим, как изменится атрибут transient:

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') print(inspect(article).transient) session.add(article) print(inspect(article).transient)

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

True False

После добавления в сессию объект перестает быть транзитным, хотя еще не сохранен в базе данных.

Пример

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

from sqlalchemy import create_engine, inspect, select 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).transient)

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

False

После коммита объект находится в состоянии persistent, и атрибут transient возвращает False.

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

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