Метод execution_options класса Delete
Метод execution_options класса Delete
задает параметры выполнения для оператора удаления
строк. Первым параметром метод принимает словарь
с настройками, которые влияют на поведение
выполняемого запроса. Метод возвращает новый
объект Delete с обновленными настройками
выполнения.
Синтаксис
Delete.execution_options(**kwargs)
Пример
Давайте создадим таблицу articles и удалим
строки с настройкой выполнения:
from sqlalchemy import create_engine, delete, 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('status', String)
)
metadata.create_all(engine)
with engine.begin() as conn:
conn.execute(articles.insert(), [
{'title': 'article 1', 'status': 'active'},
{'title': 'article 2', 'status': 'archive'}
])
stmt = delete(articles).where(articles.c.status == 'archive')
stmt = stmt.execution_options(synchronize_session=False)
with engine.begin() as conn:
res = conn.execute(stmt)
print(res.rowcount)
Результат выполнения кода:
1
Пример
Давайте проверим, что после удаления в таблице осталась только одна строка:
from sqlalchemy import create_engine, delete, select, 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('status', String)
)
metadata.create_all(engine)
with engine.begin() as conn:
conn.execute(articles.insert(), [
{'title': 'article 1', 'status': 'active'},
{'title': 'article 2', 'status': 'archive'}
])
stmt = delete(articles).where(articles.c.status == 'archive')
stmt = stmt.execution_options(synchronize_session='fetch')
with engine.begin() as conn:
conn.execute(stmt)
res = conn.execute(select(articles.c.title)).fetchall()
print(res)
Результат выполнения кода:
[('article 1',)]
Пример
Давайте посмотрим итоговый SQL-запрос, который формируется при удалении строк:
from sqlalchemy import create_engine, delete, MetaData, Table, Column, Integer, String
from sqlalchemy.dialects import sqlite
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('status', String)
)
stmt = delete(articles).where(articles.c.status == 'archive')
stmt = stmt.execution_options(synchronize_session=False)
print(stmt.compile(dialect=sqlite.dialect()))
Итоговый SQL запрос:
DELETE FROM articles WHERE articles.status = ?
Смотрите также
-
класс
Delete,
который представляет оператор удаления строк -
метод
where,
который задает условие отбора удаляемых строк -
метод
returning,
который возвращает значения удаленных строк -
метод
execution_options,
который задает параметры выполнения удаления