Метод where класса Delete
Метод where класса Delete
добавляет условие в конструкцию WHERE
SQL-запроса DELETE. Первым параметром
метод принимает условие отбора, обычно
выражение вида table.c.column == value.
Если метод не вызвать, то будут удалены
все строки таблицы.
Синтаксис
delete(table).where(condition)
Пример
Давайте создадим таблицу articles
и удалим из нее строку с id равным 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),
)
metadata.create_all(engine)
with engine.connect() as conn:
conn.execute(articles.insert(), [
{'id': 1, 'title': 'article 1', 'text': 'text 1'},
{'id': 2, 'title': 'article 2', 'text': 'text 2'},
])
stmt = articles.delete().where(articles.c.id == 1)
res = conn.execute(stmt)
print(res.rowcount)
res = conn.execute(articles.select())
print(res.fetchall())
Результат выполнения кода:
1
[(2, 'article 2', 'text 2')]
Пример
Давайте объединим два условия через
and_ и удалим сразу несколько строк:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, and_
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.connect() as conn:
conn.execute(articles.insert(), [
{'id': 1, 'title': 'article 1', 'status': 'draft'},
{'id': 2, 'title': 'article 2', 'status': 'draft'},
{'id': 3, 'title': 'article 3', 'status': 'published'},
])
stmt = articles.delete().where(
and_(articles.c.status == 'draft', articles.c.id == 2)
)
res = conn.execute(stmt)
print(res.rowcount)
res = conn.execute(articles.select())
print(res.fetchall())
Результат выполнения кода:
1
[(1, 'article 1', 'draft'), (3, 'article 3', 'published')]
Пример
Давайте посмотрим итоговый SQL-запрос,
который генерирует метод where:
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),
)
stmt = articles.delete().where(articles.c.id == 1)
print(stmt)
Результат выполнения кода:
"DELETE FROM articles WHERE articles.id = :id_1"
Итоговый SQL запрос:
DELETE FROM articles WHERE articles.id = ?
Смотрите также
-
класс
Delete,
который представляет конструкцию DELETE -
метод
returning,
который возвращает удаленные строки -
метод
execution_options,
который задает опции выполнения запроса -
метод
where,
который задает условие удаления строк