![](/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.