Django检查查询是否存在
在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 - 这里是外键的例子:
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 ...