一、模型查询
1.filter(条件):查询满足条件的信息
def sel_stu(request):
# 查询年龄等于18的学生
stus = Student.objects.filter(age=18)
# 获取学生的姓名
stus_name = [stu.name for stu in stus]
return HttpResponse(stus_name)
2.all():查询所有
def sel_stu(request):
# 查询所有学生
stus = Student.objects.all()
# 获取学生的姓名
stus_name = [stu.name for stu in stus]
return HttpResponse(stus_name)
3.get(条件): 获取唯一的满足条件的对象,且查询的条件必须存在
first(): 获取结果中的第一个对象
last(): 获取结果中的最后一个对象
如果查询条件不存在,则报错。如果查询有多个结果,也会报错。
def sel_stu(request):
stu = Student.objects.get(name='小明')
# 获取学生的姓名
stu_name = stu.name
return HttpResponse(stu_name)
4.exclude(条件):过滤掉满足条件的信息
def sel_stu(request):
stus = Student.objects.exclude(name='小明')
# 获取学生的姓名
stus_name = [stu.name for stu in stus]
return HttpResponse(stu_name)
5.filter(条件1,条件2):多条件查询
def sel_stu(request):
# 方法一:
stus = Student.objects.filter(age=18).filter(gender=0)
# 方法二:
stus = Student.objects.filter(age=18, gender=0)
# 获取学生的姓名
stus_name = [stu.name for stu in stus]
return HttpResponse(stu_name)
6.order_by():排序
def sel_stu(request):
# 升序
# stus = Student.objects.all().order_by('id')
# 降序
stus = Student.objects.all().order_by('-id')
# 获取学生的姓名
stus_name = [stu.name for stu in stus]
return HttpResponse(stu_name)
7.values():以键值对的形式获取对象信息
def sel_stu(request):
# stus_value = Student.objects.filter(name='小明').values('name')
# stus_value = Student.objects.filter(name='小明').values()
stus_value = Student.objects.all().values()
return HttpResponse(stus_value)
8.exists(): 是否存在,存在返回True,不存在返回False
def sel_stu(request):
stu = Student.objects.filter(name='妲己').exists()
return HttpResponse(stu)
二、比较运算符
1.模糊查询
contains:是否包含,大小写敏感
startswith,endswith:以values开头或者结尾,大小写敏感
以上的运算符前加上i(ignore)就不区分大小写了
contains:大小写敏感 icontains:大小写不敏感
def sel_stu(request):
# 姓名中包含大的学生信息
stus = Student.objects.filter(name__contains='大')
# 姓王的学生信息
stus = Student.objects.filter(name__startswith='王')
# 姓名最后一个字是克的学生信息
stus = Student.objects.filter(name__endswith='克')
# 获取学生的姓名
stus_name = [stu.name for stu in stus]
return HttpResponse(stus_name)
2.in
__in:是否包含在范围内
pk:主键
def sel_stu(request):
stus = Student.objects.filter(id__in=[1, 2, 3])
stus = Student.objects.filter(pk__in=[1, 2, 3])
return HttpResponse(stus)
3.gt,gte,lt,lte
小于:__gt
大于等于:__gte
小于:__lt
小于等于:__gte
def sel_stu(request):
# 年龄小于19的学生
stus = Student.objects.filter(age__lt=19)
# 年龄大于等于19的学生
stus = Student.objects.filter(age__lte=19)
# 年龄大于19的学生
stus = Student.objects.filter(age__gt=19)
# 年龄大于等于19的学生
stus = Student.objects.filter(age__gte=19)
return HttpResponse(stus)
三、聚合函数
aggregate()函数返回聚合函数的值
1.Avg():求平均值
def sel_stu(request):
# 查询平均年龄
avg_age = Student.objects.all().aggregate(Avg('age'))
return HttpResponse(avg_age)
2.Count():求总数
def sel_stu(request):
# 查询学生个数
count_num = Student.objects.all().aggregate(Count('id'))
return HttpResponse(count_num)
3.Max():求最大值
def sel_stu(request):
# 查询最大年龄
max_age = Student.objects.all().aggregate(Max('age'))
return HttpResponse(max_age)
4.Min():求最小值
def sel_stu(request):
# 查询最小年龄
min_age = Student.objects.all().aggregate(Min('age'))
return HttpResponse(min_age)
5.Sum():求和
def sel_stu(request):
# 查询年龄总和
sum_age = Student.objects.all().aggregate(Sum('age'))
return HttpResponse(min_age)
四、Q对象和F对象
1.Q对象:将过滤条件组合起来
def sel_stu(request):
# 查询age=18或者gender=1的学生信息
stus = Student.objects.filter(Q(age=18) | Q(gender=1))
# 查询age=18并且gender=1的学生信息
stus = Student.objects.filter(Q(age=18) & Q(gender=1))
stus = Student.objects.filter(Q(age=18), Q(gender=1))
# 查询age!=18或者gender=1的学生信息
stus = Student.objects.filter(~Q(age=18) | Q(gender=1))
return HttpResponse(stus)
2.F对象:可以使用模型的A属性与B属性进行比较
def sel_stu(request):
# 查询语文成绩比数学成绩高的学生信息
stus = Student.objects.filter(chinese__gt=F('math'))
# 查询语文成绩比数学成绩高10分的学生信息
stus = Student.objects.filter(chinese__gt=F('math')+10)
return HttpResponse(stus)
网友评论