Sqlalchemy 简明教程

SQLAlchemy Core - Multiple Table Deletes

在本章中,我们将研究类似于使用多表更新功能的多表删除表达式。

在许多 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。