Атрибут 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,
который возвращает сессию объекта