一、模型查詢
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)就不區(qū)分大小寫了
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)
三、聚合函數(shù)
aggregate()函數(shù)返回聚合函數(shù)的值
1.Avg():求平均值
def sel_stu(request):
# 查詢平均年齡
avg_age = Student.objects.all().aggregate(Avg('age'))
return HttpResponse(avg_age)
2.Count():求總數(shù)
def sel_stu(request):
# 查詢學生個數(shù)
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):
# 查詢語文成績比數(shù)學成績高的學生信息
stus = Student.objects.filter(chinese__gt=F('math'))
# 查詢語文成績比數(shù)學成績高10分的學生信息
stus = Student.objects.filter(chinese__gt=F('math')+10)
return HttpResponse(stus)