如何在Flask-SQLAlchemy中按ID删除记录


127

users在MySql数据库中有表。这个表有idname而且age领域。

如何删除某些记录id

现在,我使用以下代码:

user = User.query.get(id)
db.session.delete(user)
db.session.commit()

但是我不想在删除操作之前进行任何查询。有什么办法吗?我知道,我可以使用db.engine.execute("delete from users where id=..."),但是我想使用delete()方法。

Answers:


206

你可以这样做,

User.query.filter_by(id=123).delete()

要么

User.query.filter(User.id == 123).delete()

确保作出commitdelete()生效。


19
确保你把db.session.commit()最后。其中,DB: db = SQLAlchemy(app)

您可以通过这种方法使用IN吗?
ram4nd

10
警告:delete如果您依赖python / ORM中的级联,则这样的操作不会级联。您将需要先查询对象,然后删除
nirvana-msu

5
如果User不存在会发生什么?
senaps

我们如何覆盖/扩展这个delete()方法?在flask应用程序的models.py中定义的类用户。
侯赛因


9

另一个可能的解决方案,特别是如果要批量删除

deleted_objects = User.__table__.delete().where(User.id.in_([1, 2, 3]))
session.execute(deleted_objects)
session.commit()
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.