Django检查查询是否存在

时间:2010-04-22 11:58:38

标签: python django django-views

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

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

这是在php中完成的方式

if(mysql_num_rows($resultn)) {
    // True condition
    }
else {
    // False condition
    }

5 个答案:

答案 0 :(得分:153)

从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")

答案 1 :(得分:63)

使用count()

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

if sc.count() > 0:
   ...

优于例如len()是,尚未评估QuerySet:

  

count()在幕后执行SELECT COUNT(*),因此您应始终使用count()而不是将所有记录加载到Python对象中并在结果上调用len()

考虑到这一点,When QuerySets are evaluated值得一读。


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

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

<强>更新 也可以使用exists()

if scorm.objects.filter(Header__id=qp.id).exists():
    ....
  

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

答案 2 :(得分:0)

这对我有用!

如果some_queryset.objects.all()。exists(): 打印(“此表不为空”)

答案 3 :(得分:0)

Django 提供了一个叫做 exists() 的方法来检查我们查询的结果是否存在。 exists() 方法返回“真”或“假”

Class Company(models.Model):
      name = models.CharField(max_length=100)
      year_established = models.DateField()

Class Car(models.Model):
     name = models.CharField(max_length=100)
     company = models.ForeignKey(Company,related_name='car_company',on_delete=models.CASCADE)

以下是使用exists()方法的查询

1. Car.objects.filter(name='tesla').exists()  
2. Company.objects.filter(year_established='date').exists()

使用存在于相关领域 - 这里是外键

  1. Car.objects.filter(company__name='tesla').exists()

你可以提供任何可用的过滤器并使用exists()方法

答案 4 :(得分:0)

len(queryset) 也有效。

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

if len(sc):
    ....