嘗試洗掉可能為空的 QuerySet 是否安全?換句話說,如果我不確定“MJ”這個名字是否存在,這兩種方法之間是否有任何功能差異?是首選嗎?
1)
query = m.objects.filter(name="MJ")
if query.exists():
query.get().delete()
m.objects.filter(name="MJ").delete()
uj5u.com熱心網友回復:
是的。該.get()會嘗試檢索單一物件,如果有,它將導致一個錯誤的多個這樣的物件。
此外,如果只有一條記錄,第一個變體將進行三個查詢:首先檢查是否存在至少一條記錄,然后獲取該記錄,最后進行洗掉呼叫,這也可能導致洗掉觸發器。
第二個將洗掉獲取將洗掉的物件的主鍵,運行洗掉觸發器并最終洗掉這些物件。因此效率更高。此外,如果不存在這樣的記錄,或者多個物件帶有MJas name,它將洗掉這些物件,因此更不容易出錯且效率更高。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/396957.html
標籤:姜戈 django 模型 django-queryset
