【发布时间】:2013-02-22 11:58:11
【问题描述】:
我正在尝试在 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')
【问题讨论】:
-
你用的是orm层还是sql层?你能包括你试过的sn-p吗?
-
ORM,但很乐意使用任何有助于我们实现查询的东西。我更新了我的问题,到目前为止我的尝试都失败了。
标签: python mysql sql sqlalchemy