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

Атрибут was_deleted

Атрибут was_deleted класса InstanceState возвращает логическое значение, которое показывает, был ли объект удален из сессии. Атрибут принимает значение True, если объект был удален в текущей транзакции или ранее, но все еще связан с сессией. Если объект не удалялся, атрибут возвращает False.

Атрибут was_deleted доступен через объект InstanceState, который можно получить с помощью функции inspect. Этот атрибут полезен для проверки состояния объекта после вызова метода delete или до выполнения flush.

Синтаксис

state = inspect(obj) state.was_deleted

Пример

Давайте создадим объект, удалим его из сессии и проверим атрибут was_deleted:

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] status: Mapped[str] num: Mapped[int] engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: article = Article( title='article 1', text='text 1', status='published', num=1 ) session.add(article) session.commit() state = inspect(article) print('Before delete:', state.was_deleted) session.delete(article) state = inspect(article) print('After delete:', state.was_deleted) session.commit() state = inspect(article) print('After commit:', state.was_deleted)

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

"Before delete: False" "After delete: True" "After commit: True"

Пример

Давайте проверим атрибут was_deleted для объекта, который не удалялся:

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] status: Mapped[str] num: Mapped[int] engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: article = Article( title='article 2', text='text 2', status='draft', num=2 ) session.add(article) session.commit() state = inspect(article) print('Was deleted:', state.was_deleted)

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

"Was deleted: False"

Пример

Давайте удалим объект и откатим транзакцию, чтобы проверить поведение атрибута:

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] status: Mapped[str] num: Mapped[int] engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: article = Article( title='article 3', text='text 3', status='published', num=3 ) session.add(article) session.commit() session.delete(article) state = inspect(article) print('After delete:', state.was_deleted) session.rollback() state = inspect(article) print('After rollback:', state.was_deleted)

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

"After delete: True" "After rollback: False"

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

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