详解Django的 exists() 函数:判断查询结果是否存在

  • Post category:Python

exists()是Django ORM QuerySet对象的一个方法,用于判断查询结果是否存在。其返回值为布尔类型,如果查询结果存在,返回True;否则返回False。

exists()的使用方法如下:

queryset.exists()

其中,queryset为QuerySet对象。该方法不会模仿查询,只是检查QuerySet对象中是否有至少一行记录。

例如,我们有如下模型:

from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=100)
    age = models.IntegerField()

现在我们有两条记录:

Person.objects.create(name='Alice', age=18)
Person.objects.create(name='Bob', age=20)

我们可以使用exists()方法,以及filter()方法来检查是否存在指定的结果:

# 确认有名字为'Alice'的记录存在:
exists = Person.objects.filter(name='Alice').exists()
if exists:
    print('存在名字为Alice的记录')
else:
    print('不存在名字为Alice的记录')

# 确认年龄等于21的记录是否存在:
exists = Person.objects.filter(age=21).exists()
if exists:
    print('存在年龄为21的记录')
else:
    print('不存在年龄为21的记录')

这将输出:

存在名字为Alice的记录
不存在年龄为21的记录

这里提供一个更为实际的例子。我们假设有一个Blog模型:

class Blog(models.Model):
    name = models.CharField(max_length=100)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

现在,我们希望检查名字为’Hello World!’的博客是否存在。代码如下:

blog_exists = Blog.objects.filter(name='Hello World!').exists()
if blog_exists:
    print('存在名为Hello World!的博客')
else:
    print('不存在名为Hello World!的博客')

如果数据库中存在名为’Hello World!’的博客,将输出“存在名为Hello World!的博客”;否则将输出“不存在名为Hello World!的博客”。

再举一个例子,我们假设有Article模型:

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    is_published = models.BooleanField(default=False)
    pub_date = models.DateTimeField(null=True, blank=True)

现在我们希望检查是否有已经发布(is_published=True)的文章。代码如下:

published_exists = Article.objects.filter(is_published=True).exists()
if published_exists:
    print('已经有文章被发布了')
else:
    print('目前没有文章被发布')

如果数据库中存在已经发布的文章,将输出“已经有文章被发布了”;否则将输出“目前没有文章被发布”。