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

Метод delete класса Session

Метод delete класса Session помечает переданный объект как подлежащий удалению из базы данных. Первым параметром метод принимает экземпляр модели, который нужно удалить. Само удаление из базы данных произойдет только после вызова метода commit или flush. До этого момента объект находится в состоянии ожидания удаления.

Синтаксис

session.delete(instance)

Пример

Давайте создадим сессию, добавим статью и удалим ее методом delete:

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(50)) 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(article in session) session.delete(article) print(article in session)

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

True False

Пример

Давайте убедимся, что после вызова delete и commit объект действительно удаляется из базы данных:

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(50)) 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) session.commit() res = session.scalars(select(Article)).all() print(res)

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

[]

Пример

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

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(50)) engine = create_engine('sqlite:///:memory:', echo=True) Base.metadata.create_all(engine) with Session(engine) as session: article = Article(title='article') session.add(article) session.commit() session.delete(article) session.commit()

Итоговый SQL запрос:

DELETE FROM articles WHERE articles.id = ?

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

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