Python中Django的ORM高級用法
一、模糊查詢
contains
查詢某個屬性中包含某個數據結果
def stuinfo(request): ##查詢字段中包含某個內容 data_list = stu.objects.filter(name__contains="華") for item in data_list: print(item.name) return HttpResponse("查詢成功")
startswith、endswith
def stuinfo(request): ###查詢以什么開頭的內容 stu_start = stu.objects.filter(name__startswith="張") for item in stu_start: print(item.name) return HttpResponse("查詢成功")
def stuinfo(request): ###查詢以什么結尾的結尾 stu_end = stu.objects.filter(name__endswith="華") for item in stu_end: print(item.name) return HttpResponse("查詢成功"
注釋:以上運算符都區(qū)分大小寫,在這些運算符前加上i表示不區(qū)分大小寫,如iexact、icontains、istartswith、iendswith.
isnull
查看某個字段為空的記錄
def stuinfo(request): ###比較大小 null_stu = stu.objects.filter(description__isnull=True) ##查詢description為空的數據結果 for item in null_stu: print(item.age) return HttpResponse("查詢成功")
比較查詢
gt 大于 (greater then) gte 大于等于 (greater then equal) lt 小于 (less then) lte 小于等于 (less then equal)
def stuinfo(request): ###比較大小 age_stu = stu.objects.filter(age__gt=22) ###查詢年齡大于22的結果 for item in age_stu: print(item.age) return HttpResponse("查詢成功")
日期查詢
year、month、day、week_day、hour、minute、second:對日期時間類型的屬性進行運算。
from django.utils import timezone as datetime def stuinfo(request): ###根據日期進行查詢 time_stu = stu.objects.filter(create_time__gt=datetime.datetime(2020,11,20)) ##查看創(chuàng)建時間在2020年11月20日之后的數據 print(time_stu) return HttpResponse("查詢成功")
二、進階查詢
F查詢
之前的查詢都是對象的屬性與常量值比較,兩個屬性怎么比較呢? 答:使用F對象,被定義在django.db.models中。
from django.db.models import F def stuinfo(request): ###F查詢,不同屬性之間進行比較 stu.objects.filter(id=1).update(update_time="2022-5-22") ###更新某個字段的數據 f_stu = stu.objects.get(id=1) print(f_stu.name) stu_list = stu.objects.exclude(create_time=F("update_time")) ##查看創(chuàng)建時間和更新時間不一樣的數據 print(stu_list) return HttpResponse("查詢成功")
Q查詢
多個過濾器逐個調用表示邏輯與關系,同sql語句中where部分的and關鍵字。
如果需要實現邏輯或or的查詢,需要使用Q()對象結合|運算符,Q對象被義在django.db.models中。
from django.db.models import Q def stuinfo(request): ###Q查詢,不同屬性之間進行比較,類似sql中邏輯或,與的關系 ##查看年齡小于19或者大于22 q_stu = stu.objects.filter(Q(age__lt=19) | Q(age__gt=22)).all() for item in q_stu: print(item.age) return HttpResponse("查詢成功")
Q對象可以使用&、|連接,&表示邏輯與,|表示邏輯或**
from django.db.models import Q def stuinfo(request): ##查看年齡不等于22的 q_stu = stu.objects.filter(~Q(age=22)) for item in q_stu: print(item.age) return HttpResponse("查詢成功")
聚合查詢
使用aggregate()過濾器調用聚合函數。聚合函數包括:Avg 平均,Count 數量,Max 最大,Min 最小,Sum 求和,被定義在django.db.models中。
注意:aggregate的返回值是一個字典類型,格式如下:
{'屬性名__聚合類小寫':值}
from django.db.models import Sum,Count,Avg,Max,Min def stuinfo(request): ###聚合查詢聚合函數包括:Avg 平均,Count 數量,Max 最大,Min 最小,Sum 求和 ##查看數量 stu_count = stu.objects.count() ##使用count時一般不使用aggregate()過濾器。 print(stu_count) #查詢平均年齡 avg_stu = stu.objects.aggregate(Avg('age')) print(avg_stu) ##最大值 max_stu = stu.objects.aggregate(Max('age')) print(max_stu) return HttpResponse("查詢成功")
到此這篇關于Python中Django的ORM高級用法的文章就介紹到這了,更多相關Django的ORM高級用法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python中使用 xlwt 操作excel的常見方法與問題
這篇文章主要給大家介紹了關于python中使用 xlwt 操作excel的常見方法與問題的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-01-01詳解?PyTorch?Lightning模型部署到生產服務中
這篇文章主要為大家介紹了如何將PyTorch?Lightning模型部署到生產服務中的詳細教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-09-09