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

Метод returning класса Delete

Метод returning класса Delete позволяет получить значения колонок удалённых строк прямо в момент выполнения запроса. Это полезно, когда нужно узнать, какие именно записи были удалены, или извлечь их данные до того, как они исчезнут из таблицы. Метод принимает одну или несколько колонок таблицы, значения которых должны быть возвращены. Возврат поддерживается не всеми СУБД: например, PostgreSQL, SQLite (начиная с версии 3.35) и MariaDB поддерживают эту возможность, а MySQL требует дополнительных условий.

Синтаксис

delete(table).returning(column1, column2, ...)

Пример

Давайте создадим таблицу articles и удалим из неё одну строку, вернув её идентификатор и заголовок:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String 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(), [ {'id': 1, 'title': 'article 1', 'text': 'text 1', 'status': 'draft', 'num': 10}, {'id': 2, 'title': 'article 2', 'text': 'text 2', 'status': 'published', 'num': 20}, ]) res = conn.execute( articles.delete() .where(articles.c.id == 1) .returning(articles.c.id, articles.c.title) ) print(res.fetchall())

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

[(1, 'article 1')]

Пример

Давайте удалим сразу несколько строк и вернём все колонки удалённых записей:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String 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(), [ {'id': 1, 'title': 'article 1', 'text': 'text 1', 'status': 'draft', 'num': 10}, {'id': 2, 'title': 'article 2', 'text': 'text 2', 'status': 'published', 'num': 20}, {'id': 3, 'title': 'article 3', 'text': 'text 3', 'status': 'draft', 'num': 30}, ]) res = conn.execute( articles.delete() .where(articles.c.status == 'draft') .returning(articles) ) for row in res: print(row)

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

(1, 'article 1', 'text 1', 'draft', 10) (3, 'article 3', 'text 3', 'draft', 30)

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

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