exists函数在Django'中是否有性能代价;什么是ORM?

exists函数在Django'中是否有性能代价;什么是ORM?,django,django-orm,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({'det

假设我正在尝试查询这样一个表:

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)

通过检查是否存在,然后选择相关字段,是否会导致性能成本?或者它足够小以至于可以忽略不计?

是的,它将查询数据库,但是尽可能少的查询

如报告中所述:

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

此外,如果某个查询集尚未被评估,但您知道它将在某个时刻被评估,那么使用某个查询集.exists()将比简单地使用bool(某个查询集)做更多的总体工作(一个查询用于存在性检查,另一个查询用于以后检索结果),它检索结果,然后检查是否返回了任何结果