Учебники

Ядро SQLAlchemy — удаление нескольких таблиц

В этой главе мы рассмотрим выражение для удаления нескольких таблиц, которое похоже на использование функции обновления нескольких таблиц.

На многих диалектах СУБД в предложении WHERE оператора DELETE можно ссылаться более чем на одну таблицу. Для PG и MySQL используется синтаксис «DELETE USING»; а для SQL Server выражение «DELETE FROM» относится к нескольким таблицам. Конструкция SQLAlchemy delete () неявно поддерживает оба этих режима, указав несколько таблиц в предложении WHERE следующим образом:

stmt = users.delete().\
   where(users.c.id == addresses.c.id).\
   where(addresses.c.email_address.startswith('xyz%'))
conn.execute(stmt)

В бэкэнде PostgreSQL полученный SQL из вышеприведенного оператора будет выглядеть как —

DELETE FROM users USING addresses
WHERE users.id = addresses.id
AND (addresses.email_address LIKE %(email_address_1)s || '%%')

Если этот метод используется с базой данных, которая не поддерживает это поведение, компилятор вызовет NotImplementedError.