Атрибут deleted
Атрибут deleted класса InstanceState
возвращает булево значение True или False.
Он показывает, был ли объект помечен как удаленный
в текущей сессии. Если объект был удален через
метод delete, то атрибут вернет True.
В противном случае - False.
Синтаксис
from sqlalchemy import inspect
state = inspect(obj)
state.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]
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
article = Article(title='article 1')
session.add(article)
session.commit()
state = inspect(article)
print(state.deleted)
Результат выполнения кода:
False
Пример
Теперь давайте удалим объект и проверим
атрибут 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]
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
article = Article(title='article 1')
session.add(article)
session.commit()
session.delete(article)
state = inspect(article)
print(state.deleted)
Результат выполнения кода:
True
Пример
Давайте проверим состояние объекта после отката транзакции:
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 1')
session.add(article)
session.commit()
session.delete(article)
session.rollback()
state = inspect(article)
print(state.deleted)
Результат выполнения кода:
False
Смотрите также
-
класс
InstanceState,
который представляет состояние объекта -
атрибут
was_deleted,
который показывает, был ли объект удален ранее -
атрибут
detached,
который показывает, отсоединен ли объект от сессии -
атрибут
persistent,
который показывает, сохранен ли объект в базе