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

Метод expunge_all

Метод expunge_all класса Session удаляет все объекты из сессии. После вызова этого метода все объекты становятся отсоединенными от сессии и больше не отслеживаются ею. Метод не принимает параметров и не возвращает значений.

В отличие от метода expunge, который удаляет один конкретный объект, метод expunge_all очищает сессию полностью. При этом сами объекты не удаляются из базы данных, а лишь перестают быть связанными с сессией.

Синтаксис

Session.expunge_all()

Пример

Давайте создадим сессию, добавим в нее несколько объектов и вызовем метод expunge_all:

from sqlalchemy import create_engine, String 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] = mapped_column(String(100)) text: Mapped[str] = mapped_column(String(1000)) engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) with Session(engine) as session: article1 = Article(title='article 1', text='text 1') article2 = Article(title='article 2', text='text 2') session.add_all([article1, article2]) session.commit() print(f"Before expunge_all: {len(session.identity_map)}") session.expunge_all() print(f"After expunge_all: {len(session.identity_map)}")

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

"Before expunge_all: 2" "After expunge_all: 0"

Пример

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

from sqlalchemy import create_engine, String 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] = mapped_column(String(100)) text: Mapped[str] = mapped_column(String(1000)) 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() print(f"In session: {article in session}") session.expunge_all() print(f"In session: {article in session}")

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

"In session: True" "In session: False"

Пример

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

from sqlalchemy import create_engine, String, select 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] = mapped_column(String(100)) text: Mapped[str] = mapped_column(String(1000)) 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_all() res = session.scalars(select(Article)).all() print(f"Articles in DB: {len(res)}") print(f"Title: {res[0].title}")

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

"Articles in DB: 1" "Title: article"

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

  • класс Session,
    который представляет сессию для работы с базой данных
  • метод expunge,
    который удаляет один конкретный объект из сессии
  • метод expire_all,
    который сбрасывает состояние всех объектов в сессии
  • метод close,
    который закрывает сессию и освобождает ресурсы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить