Django检查查询是否存在

117 投票
5 回答
157202 浏览
提问于 2025-04-15 21:54

在Django中,如何检查某个查询是否有任何记录存在

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

这是在PHP中是怎么做的

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

5 个回答

1

Django 提供了一个叫做 exists() 的方法,用来检查我们的查询是否有结果。这个 exists() 方法会返回 'True' 或者 'False'。

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()

在相关字段中使用 exists - 这里是外键的例子:

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

你可以使用任何可用的过滤条件,然后用 exists() 方法来检查结果。

237

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

你可以使用 exists() 方法:

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

如果这个查询结果里有数据,就返回 True;如果没有数据,就返回 False。这个方法会尽量以最简单和最快的方式来执行查询,但它实际上执行的查询和普通的查询几乎是一样的。

旧版本: (<1.2)

可以使用 count() 方法:

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

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

相比于 len(),这个方法的好处是,查询集还没有被计算:

count() 在后台执行一个 SELECT COUNT(*) 的操作,所以你应该总是使用 count(),而不是把所有记录加载到 Python 对象中再用 len() 来计算结果。

记住这一点,查询集何时被计算 这部分内容值得一读。


如果你使用 get() 方法,比如 scorm.objects.get(pk=someid),但这个对象不存在,就会抛出一个 ObjectDoesNotExist 的异常:

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

撰写回答