Sqlalchemy-core-multiple-table-deletes

提供:Dev Guides
移動先:案内検索

SQLAlchemyコア-複数のテーブルの削除

この章では、複数テーブルの更新機能を使用するのと同様の、複数テーブルの削除式について説明します。

多くのDBMS方言で、DELETEステートメントのWHERE句で複数のテーブルを参照できます。 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を発生させます。