在Django的ORM中,是否存在功能会降低性能?

时间:2019-11-13 21:09:07

标签: django django-orm

让我们说我试图像这样查询一个表:

if MyModel.objects.filter(field1='some-value', field2='some-value').exists():
    obj = MyModel.objects.select_related('related_model_1', 'related_model_2').get(field1='some-value', field2='some-value')
else:
    return Response({'detail': 'Not found'}, status=status.HTTP_404_NOT_FOUND)

我是否需要通过检查是否存在然后选择相关字段来产生性能成本?还是小到可以忽略不计?

1 个答案:

答案 0 :(得分:1)

是的,它将查询数据库,但查询最少。

docs中所述:

  

如果QuerySet包含任何结果,则返回True,否则返回False。 这会尝试以最简单,最快的方式执行查询,但它的执行与普通QuerySet查询几乎相同。

  

另外,如果还没有评估some_queryset,但是您知道它会在某个时候进行评估,那么使用some_queryset.exists()会做更多的整体工作(一个查询是否存在) check加上一个额外的值,以后再检索结果),而不是简单地使用bool(some_queryset)来检索结果,然后检查是否返回了任何结果。