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

Класс Delete

Класс Delete представляет конструкцию удаления строк из таблицы базы данных. Объект этого класса создается автоматически при вызове метода delete у таблицы или ORM-класса. Класс поддерживает методы where для фильтрации удаляемых строк, returning для возврата значений удаленных строк и execution_options для настройки выполнения запроса.

Синтаксис

from sqlalchemy import delete stmt = delete(table) stmt = delete(table).where(condition)

Пример

Давайте создадим таблицу и удалим из нее одну строку с помощью класса Delete:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, delete engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('text', String), Column('status', String), Column('num', Integer) ) metadata.create_all(engine) with engine.begin() as conn: conn.execute(articles.insert(), [ {'title': 'article 1', 'text': 'text 1', 'status': 'new', 'num': 1}, {'title': 'article 2', 'text': 'text 2', 'status': 'old', 'num': 2}, {'title': 'article 3', 'text': 'text 3', 'status': 'new', 'num': 3} ]) stmt = delete(articles).where(articles.c.status == 'old') res = conn.execute(stmt) print(res.rowcount) rows = conn.execute(articles.select()).fetchall() print(rows)

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

1 [(1, 'article 1', 'text 1', 'new', 1), (3, 'article 3', 'text 3', 'new', 3)]

Пример

Давайте удалим сразу все строки из таблицы, не указывая условие where:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, delete engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('text', String), Column('status', String), Column('num', Integer) ) metadata.create_all(engine) with engine.begin() as conn: conn.execute(articles.insert(), [ {'title': 'article 1', 'text': 'text 1', 'status': 'new', 'num': 1}, {'title': 'article 2', 'text': 'text 2', 'status': 'old', 'num': 2} ]) stmt = delete(articles) res = conn.execute(stmt) print(res.rowcount) rows = conn.execute(articles.select()).fetchall() print(rows)

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

2 []

Пример

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

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, delete engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('text', String), Column('status', String), Column('num', Integer) ) metadata.create_all(engine) with engine.begin() as conn: conn.execute(articles.insert(), [ {'title': 'article 1', 'text': 'text 1', 'status': 'new', 'num': 1}, {'title': 'article 2', 'text': 'text 2', 'status': 'old', 'num': 2}, {'title': 'article 3', 'text': 'text 3', 'status': 'new', 'num': 3} ]) stmt = delete(articles).where(articles.c.num > 1).returning(articles.c.title) res = conn.execute(stmt) print(res.fetchall())

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

[('article 2',), ('article 3',)]

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

Запрос, который генерирует класс Delete с условием where, выглядит так:

DELETE FROM articles WHERE articles.status = 'old'

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

  • класс Delete,
    который представляет конструкцию удаления строк
  • метод where,
    который задает условие фильтрации удаляемых строк
  • метод returning,
    который возвращает значения удаленных строк
  • метод execution_options,
    который настраивает параметры выполнения запроса
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить