day43-Django模型操作

一、模型查詢

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)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容