Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Django中通过id搜索queryset,而无需额外的db调用_Python_Python 3.x_Django - Fatal编程技术网

Python 如何在Django中通过id搜索queryset,而无需额外的db调用

Python 如何在Django中通过id搜索queryset,而无需额外的db调用,python,python-3.x,django,Python,Python 3.x,Django,是否有一种方法可以通过id或字段组合搜索Django queryset,而无需对数据库进行额外调用 像这样的东西是单个数据库查询吗 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(restau

是否有一种方法可以通过id或字段组合搜索Django queryset,而无需对数据库进行额外调用

像这样的东西是单个数据库查询吗

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)
#同时在主键上过滤↓
qs=Employee.objects.filter(restaurant='McDonalds',pk\u in=[1,2,3])
data={q.pk:qs中q的pk}
emp1=data.get(1)
emp2=data.get(2)
emp3=数据获取(3)

使用
pk\u in=[1,2,3]
的优点是,您可以将数据库检索的记录数限制为最多三个我们感兴趣的记录。这将减少数据库必须做的工作,以及从数据库到Django/Python层的带宽。

您可以在一个查询中查询三个元素:

#                        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)
#同时在主键上过滤↓
qs=Employee.objects.filter(restaurant='McDonalds',pk\u in=[1,2,3])
data={q.pk:qs中q的pk}
emp1=data.get(1)
emp2=data.get(2)
emp3=数据获取(3)
使用
pk\u in=[1,2,3]
的优点是,您可以将数据库检索的记录数限制为最多三个我们感兴趣的记录。这将减少数据库必须做的工作,以及从数据库到Django/Python层的带宽