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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/27158573/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-19 01:29:45  来源:igfitidea点击:

How to delete a record by id in Flask-SQLAlchemy

pythonflasksqlalchemyflask-sqlalchemy

提问by Sergey

I have userstable in my MySql database. This table has id, nameand agefields.

users我的 MySql 数据库中有表。该表有idnameage字段。

How can I delete some record by id?

如何删除某些记录id

Now I use the following code:

现在我使用以下代码:

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

But I don't want to make any query before delete operation. Is there any way to do this? I know, I can use db.engine.execute("delete from users where id=..."), but I would like to use delete()method.

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

采纳答案by adarsh

You can do this,

你可以这样做,

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

or

或者

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

Make sure to commitfor delete()to take effect.

确保作出commitdelete()生效。

回答by Steve

Just want to share another option:

只想分享另一个选择:

# 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

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

In this example, the following codes shall works fine:

在这个例子中,以下代码应该可以正常工作:

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

回答by Zaytsev Dmitry

Another possible solution specially if you want batch delete

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

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