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

时间:2014-11-26 20:45:43

标签: python flask sqlalchemy flask-sqlalchemy

我的MySql数据库中有users表。此表包含idnameage字段。

如何按id删除某些记录?

现在我使用以下代码:

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

但我不希望在删除操作之前进行任何查询。有没有办法做到这一点?我知道,我可以使用db.engine.execute("delete from users where id=..."),但我想使用delete()方法。

谢谢!

4 个答案:

答案 0 :(得分:150)

你可以这样做,

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

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

确保commit delete()生效。

答案 1 :(得分:15)

只想分享另一个选项:

# mark two objects to be deleted
session.delete(obj1)
session.delete(obj2)

# commit (or flush)
session.commit()

http://docs.sqlalchemy.org/en/latest/orm/session_basics.html#deleting

在此示例中,以下代码可以正常工作:

obj=User.query.filter_by(id=123).one()
session.delete(obj)
session.commit()

答案 2 :(得分:1)

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

deleted_objects = User.__table__.delete().where(User.id.in_([1, 2, 3]))
session.execute(deleted_objects)
session.commit()

答案 3 :(得分:0)

在 sqlalchemy 1.4(2.0 风格)中,你可以这样做:

from sqlalchemy import select, update, delete, values

sql1 = delete(User).where(User.id.in_([1, 2, 3]))
sql2 = delete(User).where(User.id == 1)

db.session.execute(sql1)
db.session.commit()

u = db.session.get(User, 1)
db.session.delete(u)
db.session.commit()

在我看来,使用 select、update、delete 更具可读性。 可以找到 1.0 与 2.0 的样式比较here