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

Ser*_*gey 101 python sqlalchemy flask flask-sqlalchemy

users我的MySql数据库中有表.这个表有id,name而且age领域.

我怎样才能删除一些记录id

现在我使用以下代码:

user = User.query.get(id)
db.session.delete(user)
db.session.commit()
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

ada*_*rsh 170

你可以这样做,

commit

要么

delete()

编辑:

确保承诺commit生效.

  • 确保最后放入```db.session.commit()```.db:```db = SQLAlchemy(app)``` (14认同)
  • 警告:如果您依赖于python/ORM中的级联,那么`delete`将不会级联.您需要[先查询对象,然后删除](/sf/ask/1347077511/). (6认同)
  • 如果“用户”不存在会怎样? (2认同)

Abc*_*Xyz 29

在 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()
Run Code Online (Sandbox Code Playgroud)

或者

u = db.session.get(User, 1)
db.session.delete(u)
db.session.commit()
Run Code Online (Sandbox Code Playgroud)

在我看来,使用 select、update、delete 更具可读性。1.0 与 2.0 的风格比较可以在这里找到。

  • 这个答案应该更高。 (5认同)

Ste*_*eve 21

只想分享另一种选择:

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

# commit (or flush)
session.commit()
Run Code Online (Sandbox Code Playgroud)

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

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

obj = User.query.filter_by(id=123).one()
session.delete(obj)
session.commit()
Run Code Online (Sandbox Code Playgroud)


Zay*_*try 19

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

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