我有 2 张桌子;我们会打电话给他们table1
和table2
。table2
有一个外键table1
。我需要删除中table1
具有零子记录的行table2
。执行此操作的 SQL 非常简单:
DELETE FROM table1
WHERE 0 = (SELECT COUNT(*) FROM table2 WHERE table2.table1_id = table1.table1_id);
但是,我还没有找到将这个查询转换为 SQLAlchemy 的方法。尝试直截了当的方法:
subquery = session.query(sqlfunc.count(Table2).label('t2_count')).select_from(Table2).filter(Table2.table1_id == Table1.table1_id).subquery()
session.query(Table1).filter(0 == subquery.columns.t2_count).delete()
刚刚产生了一个错误:
sqlalchemy.exc.ArgumentError: Only deletion via a single table query is currently supported
如何DELETE
使用 SQLAlchemy 执行此操作?
- 蟒蛇 2.7
- PostgreSQL 9.2.4
- SQLAlchemy 0.7.10(由于使用 GeoAlchemy 无法升级,但如果更新版本会让这更容易,我很感兴趣)