Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
654 of 711 menu
◀ ▶

Атрибут 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,
    который показывает, сохранён ли объект в базе
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить