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

Атрибут deleted класса Session

Атрибут deleted класса Session возвращает коллекцию объектов, которые были помечены на удаление в текущей сессии, но изменения по которым ещё не зафиксированы в базе данных. Атрибут доступен только для чтения и обновляется автоматически при вызове методов delete, flush, commit и rollback. Атрибут не принимает параметров.

Синтаксис

Session.deleted

Пример

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

from sqlalchemy import create_engine, Integer, String from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(Integer, primary_key=True) title: Mapped[str] = mapped_column(String) 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(session.deleted) session.delete(article) print(session.deleted)

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

IdentitySet([]) IdentitySet([Article(id=1, title='article')])

Пример

Давайте убедимся, что после вызова метода flush список удалённых объектов очищается, так как изменения уже отправлены в базу данных:

from sqlalchemy import create_engine, Integer, String from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(Integer, primary_key=True) title: Mapped[str] = mapped_column(String) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: article = Article(title='article') session.add(article) session.commit() session.delete(article) print(session.deleted) session.flush() print(session.deleted)

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

IdentitySet([Article(id=1, title='article')]) IdentitySet([])

Пример

Давайте посмотрим, как откат транзакции методом rollback возвращает объект в сессию и убирает его из коллекции deleted:

from sqlalchemy import create_engine, Integer, String from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(Integer, primary_key=True) title: Mapped[str] = mapped_column(String) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: article = Article(title='article') session.add(article) session.commit() session.delete(article) print(session.deleted) session.rollback() print(session.deleted)

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

IdentitySet([Article(id=1, title='article')]) IdentitySet([])

Пример

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

from sqlalchemy import create_engine, Integer, String from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(Integer, primary_key=True) title: Mapped[str] = mapped_column(String) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: article1 = Article(title='article') article2 = Article(title='user') session.add_all([article1, article2]) session.commit() session.delete(article1) session.delete(article2) print(len(session.deleted))

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

2

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

  • класс Session,
    который управляет жизненным циклом объектов
  • метод delete,
    который помечает объект на удаление
  • атрибут new,
    который возвращает новые объекты сессии
  • атрибут dirty,
    который возвращает изменённые объекты сессии
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить