我试图在没有运气的情况下在 SQLAlchemy + MySQL 中复制以下查询......
delete paths from paths
join paths as p1 on p1.ancestor = <ID>
where paths.descendant = p1.descendant;
SQLAlchemy 似乎忽略了我放入删除查询的任何连接。我也尝试使用子查询而不是连接,但这在 MySQL 中是不允许的(不能从要删除的同一个表中选择)。任何帮助将非常感激。
更新:是的,我正在尝试使用 ORM 层。这是我尝试过的查询:
p1 = aliased(Path, name="p1")
db.session.query(Path).join(
p1, p1.ancestor==<ID>
)
.filter(
Path.descendant==p1.Path.descendant
).delete()
还有子查询变体,但这在 MySQL 上不起作用,所以对我来说没用:
q = db.session.query(Path.descendant).filter(Path.ancestor==<ID>).subquery()
db.session.query(Path).filter(Path.descendant.in_(q)).delete(synchronize_session='fetch')