繁体   English   中英

删除数据库中在 Flask-SQLAlchemy 的过滤查询中找不到 id 的行

[英]Delete rows in database where id not found in a filtered query in Flask-SQLAlchemy

我想删除我的数据库中在过滤查询的 ID 中找不到 ID 的行。 用外行的话来说,“如果行的 ID 不在来自按名称保留唯一用户的查询的 ID 中,则删除行”。

例如,我想清除数据库中具有重复名称的用户:

from project.models import db, User

query = User.query.group_by(User.name)
User.query.filter(** filter out User.id not found in `query.id` **).delete()
db.session.commit()

您可以在同一个查询对象上多次调用过滤器。

query = User.query.group_by(User.name).all()
delete_query = db.session.query()
for user in query:
    delete_query = delete_query.filter(User.id != user.id)
delete_query.delete()
db.session.commit()

好的,经过一番挖掘,我找到了一个可行的解决方案:

from project.models import db, User

# Filter id's where `User.name` is unique
query = User.query.with_entities(User.id).group_by(User.name)
del_query = User.__table__.delete().where(User.id.not_in(query))

# Delete posts with non-unique names
db.session.execute(del_query)
db.session.commit()

此解决方案不会使用User.query.group_by(User.name).all()迭代过滤,如果您的数据库很大,这可能会导致时间和内存问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM