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を発生させます。