[英]Django: How to count a queryset and return a slice without hitting DB twice?
[英]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.