Python模型聚合查詢-Q查詢-F查詢-分組查詢操作技巧解析_第1頁
Python模型聚合查詢-Q查詢-F查詢-分組查詢操作技巧解析_第2頁
Python模型聚合查詢-Q查詢-F查詢-分組查詢操作技巧解析_第3頁
Python模型聚合查詢-Q查詢-F查詢-分組查詢操作技巧解析_第4頁
Python模型聚合查詢-Q查詢-F查詢-分組查詢操作技巧解析_第5頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第Python模型聚合查詢\Q查詢\F查詢\分組查詢操作技巧解析目錄模型中的一些查詢操作:1.聚合查詢:aggregate()是QuerySet的一個終止子句2.Q查詢:如果你需要執行更復雜的查詢(例如OR語句)3.F查詢:(查詢的是一整列數據!)4.分組查詢4.1一對多關系4.2多對多關系

模型中的一些查詢操作:

1.聚合查詢:aggregate()是QuerySet的一個終止子句

它返回一個包含一些鍵值對的字典

frommovie.modelsimportUser

fromdjango.db.modelsimportCount,Avg,Max,Min,Sum

deftest_info(request):

#聚合查詢

#求User中的平均年齡默認返回的數據格式是一個字典,其中鍵名為age__avg,值為指定字段的平均值。

rs=User.objects.all().aggregate(Avg("age"))

#指定一個名字可以通過如下指定字典的鍵名。

rs=User.objects.all().aggregate(age=Avg("age"))

#平均,最大,最小,求和

rs=User.objects.all().aggregate(Avg("age"),Max("age"),Min("age"),Sum("age"))

默認情況下(求User中的平均年齡):

指定鍵名(求User中的平均年齡):

2.Q查詢:如果你需要執行更復雜的查詢(例如OR語句)

你可以使用Q對象。Q對象可以使用(and)、|(or)操作符;使用~(not)操作符在Q對象前表示取反

#查詢出User表中name為小明或者小紅的

rs=User.objects.filter(Q(name='小明')|Q(name='小紅'))

#查詢Student表中,name為小明,年齡不等于18的

rs=User.objects.filter(Q(name='小明')~Q(age=18))

3.F查詢:(查詢的是一整列數據!)

針對兩個字段的值的比較

#學院id小于學生的學號的

rs=Student.objects.filter(department_id__gt=F('s_id))

#給User表中的所有人加1歲

rs=User.objects.all().update(age=F('age')+1)

4.分組查詢

為調用的QuerySet中每一個對象都生成一個獨立的統計值

4.1一對多關系

importStudent,Course

fromdjango.db.modelsimportCount

#拿出學生表中需要分組的字段

rs=Student.objects.values()#以字典形式展示所有查詢到的數據的全部信息

輸出示例:

QuerySet[{'s_id':1,'s_name':'小明','department_id':1},{'s_id':2,'s_name':'小紅','department_id':2},

{'s_id':3,'s_name':'小王',department_id':1}]

rs=Student.objects.values('department')#以字典形式展示所有查詢到的數據的department字段

輸出示例:

QuerySet[{'department':1},{'department':2},{'department':1}]

rs=Student.objects.values('s_name','department')#以字典形式展示所有查詢到的數據的s_name和department字段

輸出示例:

QuerySet[{'s_name':'小明','department':1},{'s_name':'小紅','department':2},{'s_name':'小王','department':1}]

#對這個department字段進行分組

rs=Student.objects.values('department').annotate(count=Count('department'))

輸出示例:

QuerySet[{'department':1,'count':2},{'department':2,'count':1}]

#對分組后的內容按需要的字段輸出

rs=Student.objects.values('department').annotate(count=Count('department')).values('department','count')

輸出示例:

QuerySet[{'department':1,'count':2},{'department':2,'count':1}]

4.2多對多關系

#多對多關系

#以課程作為分組條件查每個課程的學生數量拿到所有的課程的數據

rs=Course.objects.all()

#關系表中,同一個課程,學生學號出現的次數,就是報名了此課程的學生的個數

rs=Course.objects.all().annotate(count=Count('students'))

rs=Course.objects.all().annotate(count=Count('students')).values('c_name','count')

#以學生作為分組條件來查每個學生報名了的課程數量拿到所有的學生的數據

rs=Student.objects.all()

#關系表中,同一個學生,課程出現的次數,就是這個學生報名的課程的數量

rs=Student.objects.all().annotate(count=Count('course'))

rs=Stu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論