![](/img/trans.png)
[英]Flask-SQLAlchemy query where substring is in database against a whole string
[英]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.