【发布时间】:2013-07-12 19:42:57
【问题描述】:
我有 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
如何使用 SQLAlchemy 执行 DELETE?
- Python 2.7
- PostgreSQL 9.2.4
- SQLAlchemy 0.7.10(由于使用 GeoAlchemy 无法升级,但如果更新版本能让这更容易,我很感兴趣)
【问题讨论】:
标签: python postgresql python-2.7 sqlalchemy