簡體   English   中英

如何在 Django 中沒有額外的數據庫調用的情況下按 id 搜索查詢集

[英]How to search a queryset by id without additional db calls in Django

有沒有辦法按 id 或字段組合搜索 Django 查詢集,而無需對數據庫進行額外調用。

這樣的事情會是一個單一的數據庫查詢嗎?

qs = Employee.objects.filter(restaurant='McDonalds')
emp1 = qs.filter(id=1)
emp2 = qs.filter(id=2)
emp3 = qs.filter(id=3)

或者是這樣做的唯一方法是事先將 id 映射到模型實例?

qs = Employee.objects.filter(restaurant='McDonalds')
emp_map = {instance.id: instance for instance in qs}
emp1 = emp_map.get(1)
emp2 = emp_map.get(2)
emp3 = emp_map.get(3)

您可以在一個查詢中查詢三個元素:

#                        filter on the primary key as well ↓
qs = Employee.objects.filter(restaurant='McDonalds', pk__in=[1, 2, 3])
data = {q.pk: pk for q in qs}

emp1 = data.get(1)
emp2 = data.get(2)
emp3 = data.get(3)

使用pk__in=[1, 2, 3]的好處是可以將數據庫檢索的記錄數限制為最多我們感興趣的三個。這將減少數據庫必須做的工作,以及帶寬從數據庫到 Django/Python 層。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM