SQLAlchemyCore-複数のテーブルの削除
この章では、Multiple TableUpdates関数の使用に似たMultipleTableDeletes式について説明します。
多くのDBMSダイアレクトでは、DELETEステートメントのWHERE句で複数のテーブルを参照できます。PGおよびMySQLの場合、「DELETEUSING」構文が使用されます。SQL Serverの場合、「DELETEFROM」式の使用は複数のテーブルを参照します。SQLAlchemydelete() 次のようにWHERE句で複数のテーブルを指定することにより、constructはこれらのモードの両方を暗黙的にサポートします。
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を発生させます。