Django检查查询是否存在

Hul*_*ulk 76 python django django-views

在django中如何检查查询是否存在任何条目

sc=scorm.objects.filter(Header__id=qp.id)
Run Code Online (Sandbox Code Playgroud)

这就是它在php中的表现

if(mysql_num_rows($resultn)) {
    // True condition
    }
else {
    // False condition
    }
Run Code Online (Sandbox Code Playgroud)

小智 165

从Django 1.2开始,您可以使用exists():

https://docs.djangoproject.com/en/dev/ref/models/querysets/#exists

if some_queryset.filter(pk=entity_id).exists():
    print("Entry contained in queryset")
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案.exists()通常比count()快得多. (24认同)
  • 它似乎也比 `.objects.get(pk=...)` 路由更快 (2认同)

Fel*_*ing 69

用途count():

sc=scorm.objects.filter(Header__id=qp.id)

if sc.count() > 0:
   ...
Run Code Online (Sandbox Code Playgroud)

优点len()是,尚未评估QuerySet:

count()SELECT COUNT(*)在幕后执行,所以你应该总是使用count() 而不是将所有记录加载到Python对象中并调用len() 结果.

考虑到这一点,在评估QuerySets时可能值得一读.


如果您使用get(),例如scorm.objects.get(pk=someid),并且该对象不存在,ObjectDoesNotExist则会引发异常:

from django.core.exceptions import ObjectDoesNotExist
try:
    sc = scorm.objects.get(pk=someid)
except ObjectDoesNotExist:
    print ...
Run Code Online (Sandbox Code Playgroud)

更新: 它也可以使用exists():

if scorm.objects.filter(Header__id=qp.id).exists():
    ....
Run Code Online (Sandbox Code Playgroud)

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

  • `if scorm.objects.filter(Header__id = qp.id).exists()` (49认同)
  • `如果sc.exists():` (3认同)