sup*_*oba 25 python orm sqlalchemy
我有一个有数百万行的表.我想通过in子句删除多行.但是,使用代码:
session.query(Users).filter(Users.id.in_(subquery....)).delete()
Run Code Online (Sandbox Code Playgroud)
上面的代码将查询结果,然后执行删除.我不想那样做.我想要速度.
我希望能够执行(是的,我知道session.execute):Delete from users where id in ()
所以问题:如何使用ORM获得两个世界中最好的?我可以在没有硬编码查询的情况下进行删除吗?
Áng*_*gel 18
from sqlalchemy import delete
statement = delete(User).where(User.id.in_(...))
session.execute(statement)
Run Code Online (Sandbox Code Playgroud)
https://docs.sqlalchemy.org/en/14/core/dml.html?highlight=delete
Oju*_*goi 14
如果开发人员不想执行普通的普通查询,以下解决方案也有效。
session.query(Users).filter(Users.id.in_(subquery....)).delete(synchronize_session=False)
Run Code Online (Sandbox Code Playgroud)
小智 11
要完成头晕的答案:
delete_q = Report.__table__.delete().where(Report.data == 'test')
db.session.execute(delete_q)
db.session.commit()
Run Code Online (Sandbox Code Playgroud)