簡體   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