聚合查询:
首先,导入:
from .models import User
from django.db.models import Count,Avg,Max,Min,Sum,F,Q
aggregate()是QuerySet 的一个终止子句,它返回一个包含一些键值对的字典
rs = User.objects.all().aggregate(Avg('age'))
rs = User.objects.all().aggregate(Avg(average_age='age'))
rs=User.objects.all().aggregate(Avg('age'),Max('age'),Min('age'),Sum('age'))
分组查询:
为调用的QuerySet中每一个对象都生成一个独立的统计值
rs = Student.objects.all().values('department').annotate(count=Count('department')).values('department_id','count')
rs = Student.objects.all().values('course').annotate(count=Count('course')).values('s_id','count')
rs=Course.objects.all().values('student').annotate(count=Count('student')).values('c_name','count')
F查询:
同一张表针对两个字段的值的比较
# Student表中,学院id小于学生学号的
rs = Student.objects.filter(department__d_id__gt=F('s_id'))
# 让所有人年龄加一岁
User.objects.all().update(age=F('age')+1)
Q查询:
如果你需要执行更复杂的查询(例如OR语句),你可以使用Q对象。
Q对象可以使用&(and)、|(or)操作符组合起来
使用~(not)操作符在Q对象前表示取反
rs = User.objects.filter(name='xps',age=18)
rs = User.objects.filter(Q(name='xps')|Q(age=18))
rs = User.objects.filter(Q(name='xps')&~Q(id=3))