Атрибут unloaded класса InstanceState
Атрибут unloaded класса InstanceState
возвращает логическое значение, которое показывает,
был ли объект выгружен из сессии. Если объект был
отсоединён от сессии, но всё ещё находится в памяти,
атрибут unloaded принимает значение True.
Если объект связан с сессией или ещё не был загружен,
атрибут возвращает False. Доступ к атрибуту
осуществляется через функцию inspect, которая
принимает экземпляр модели и возвращает объект
InstanceState.
Синтаксис
inspect(instance).unloaded
Пример
Давайте создадим модель Article и проверим
значение атрибута unloaded у загруженного
объекта:
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]
text: Mapped[str]
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
article = Article(title='article', text='text')
session.add(article)
session.commit()
state = inspect(article)
print(state.unloaded)
Результат выполнения кода:
False
Пример
Теперь давайте выгрузим объект из сессии и снова
проверим значение атрибута unloaded:
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]
text: Mapped[str]
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
article = Article(title='article', text='text')
session.add(article)
session.commit()
session.expunge(article)
state = inspect(article)
print(state.unloaded)
Результат выполнения кода:
True
Пример
Давайте проверим атрибут unloaded сразу
после создания объекта, который ещё не добавлен
в сессию:
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]
text: Mapped[str]
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
article = Article(title='article', text='text')
state = inspect(article)
print(state.unloaded)
Результат выполнения кода:
False
Смотрите также
-
класс
InstanceState,
который хранит состояние экземпляра модели -
атрибут
session,
который возвращает сессию объекта -
атрибут
detached,
который показывает, отсоединён ли объект от сессии -
атрибут
persistent,
который показывает, сохранён ли объект в базе