SQLAlchemy:如何在不查询的情况下删除多行

时间:2016-09-29 14:50:42

标签: python orm sqlalchemy

我有一个有数百万行的表。我想通过in子句删除多行。但是,使用代码:

session.query(Users).filter(Users.id.in_(subquery....)).delete()

上面的代码将查询结果,然后执行删除。我不想这样做。我想要速度。

我希望能够执行(是的,我知道session.execute):Delete from users where id in ()

所以问题:如何使用ORM获得两个世界中最好的?我可以在不对查询进行硬编码的情况下进行删除吗?

3 个答案:

答案 0 :(得分:24)

是的!您可以使用关联的whereclause在表对象上调用delete()

这样的事情:

stmt = Users.__table__.delete().where(Users.id.in_(subquery...))

(然后不要忘记执行语句:engine.execute(stmt)

source

答案 1 :(得分:4)

要完成dizzy的答案:

delete_q = Report.__table__.delete().where(Report.data == 'test')
db.session.execute(delete_q)
db.session.commit()

答案 2 :(得分:4)

如果开发人员不想执行普通的普通查询,以下解决方案也可以使用。

session.query(Users).filter(Users.id.in_(subquery....)).delete(synchronize_session=False)