浅谈Django QuerySet对象(模型.objects)的常用方法

1. QuerySet对象简介

在Django中,QuerySet是非常常用的一个对象,它代表了一个数据库查询的结果集。使用Model.objects来获得一个QuerySet对象,其中Model是模型类的名称。我们可以通过QuerySet对象来执行各种查询、过滤、排序等操作,以及执行聚合和计数等操作。下面我们将详细介绍它的常用方法。

2. 查询数据

2.1 all()

all()方法返回所有对象的QuerySet对象,相当于不加任何限制条件的查询。

from myapp.models import Person

all_persons = Person.objects.all()

2.2 get()

get()方法返回符合条件的单个对象,如果找不到对象则抛出DoesNotExist异常,如果查询条件返回多个对象则抛出MultipleObjectsReturned异常。我们可以将参数以关键字参数的形式传递,例如:

try:

person = Person.objects.get(name='Alice')

except Person.DoesNotExist:

person = None

2.3 filter()

filter()方法返回符合条件的对象集合的QuerySet对象。可以使用多个参数,参数之间默认都是“AND”的关系,如果需要使用“OR”关系,可以使用Q对象。例如:

from django.db.models import Q

person_set = Person.objects.filter(Q(name='Alice')|Q(name='Bob'))

其中Q对象可以用来组合条件。

2.4 exclude()

exclude()方法与filter()方法作用相反,返回不符合条件的对象集合的QuerySet对象。例如:

person_set = Person.objects.exclude(name='Alice')

2.5 order_by()

order_by()方法用于对QuerySet对象进行排序,默认是升序排列。可以使用多个参数来进行多重排序。例如:

person_set = Person.objects.all().order_by('-age', 'name')

以上代码表示以年龄降序排列,年龄相同时以姓名升序排列。

3. 增加和修改数据

3.1 create()

create()方法可以同时创建并保存一个新对象到数据库中,相当于以下代码:

new_person = Person(name='Alice', age=20)

new_person.save()

可以直接使用以下代码:

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

3.2 update()

update()方法用于批量更新符合筛选条件的对象的属性值。例如:

Person.objects.filter(name='Alice').update(age=21)

以上代码将所有名字为“Alice”的人的年龄更新为21岁。

4. 删除数据

4.1 delete()

delete()方法用于批量删除符合条件的对象。例如:

Person.objects.filter(name='Alice').delete()

以上代码将所有名字为“Alice”的人从数据库中删除。

5. 聚合和计数

5.1 count()

count()方法用于返回符合条件的对象数量。例如:

Person.objects.filter(name='Alice').count()

以上代码将返回名字为“Alice”的人的数量。

5.2 aggregate()

aggregate()方法用于执行聚合操作,例如对符合条件的对象求和、平均值等。以下代码演示了对年龄求和的操作:

from django.db.models import Sum

total_age = Person.objects.aggregate(Sum('age'))['age__sum']

6. 其他

6.1 select_related()

select_related()方法用于执行联表查询,它会返回一个包含关联对象的QuerySet对象,而不是返回外键对应的对象。这个方法可以大大提高查询效率,避免了多次查询数据库的操作。例如:

book_set = Book.objects.select_related('author')

以上代码将查询所有的书籍,并返回包含作者对象的QuerySet对象。

6.2 prefetch_related()

prefetch_related()方法可以用于执行反向关联联表查询,它可以一次性把相关联的所有对象全部查询出来,避免了多次查询数据库的操作。例如:

book_set = Book.objects.prefetch_related('comments')

以上代码将查询所有的书籍,并返回包含评论对象的QuerySet对象。

6.3 values()

values()方法用于返回符合条件的对象的特定字段的值的QuerySet对象。我们可以使用多个参数来指定字段。例如:

name_list = Person.objects.values('name')

以上代码将返回名字字段的值的QuerySet对象。

7. 总结

以上就是Django QuerySet对象的常用方法,我们可以根据需要来灵活使用。QuerySet对象的操作非常灵活,可以通过多个方法来组合使用,从而得到我们需要的结果。在使用QuerySet对象的过程中,我们应该掌握常用的方法,来提高数据库查询的效率。

后端开发标签