在django中如何检查查询是否存在任何条目
sc=scorm.objects.filter(Header__id=qp.id)
这是在php中完成的方式
if(mysql_num_rows($resultn)) {
// True condition
}
else {
// False condition
}
答案 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()
使用存在于相关领域 - 这里是外键
Car.objects.filter(company__name='tesla').exists()
你可以提供任何可用的过滤器并使用exists()方法
答案 4 :(得分:0)
len(queryset)
也有效。
sc = scorm.objects.filter(Header__id=qp.id)
if len(sc):
....