多表查詢

建立多表模型

一對一的關係:OneToOneField
一對多的關係:ForeignKey
多對多的關係:ManyToManyField

添加表記錄

1 一對多新增
   -兩種方式:
      -publish=對象
      -publish_id=id
2 一對多刪除:同單表刪除
3 一對多修改:兩種方式,能夠傳對象,能夠傳id
4 一對一跟一對多同樣
5 多對多:
   -add  ----->能夠傳對象,能夠傳id,能夠傳多個
   -remove  ----->能夠傳對象,能夠傳id,能夠傳多個
   -clear  ---->沒有參數
   -set   ----->跟上面不同,必須傳列表,列表裏面能夠是對象,能夠是id

基於對象的表查詢

1 一對一
   正向:正向查詢按字段
   反向:反向查詢按表名小寫
2 一對多
   正向:正向查詢按字段
   反向:反向按表名小寫_set.all()
3 多對多
   正向:正向查詢按字段.all()
   反向查詢:反向按表名小寫_set.all()
4******基於對象的查詢,屢次查詢(子查詢)

基於雙下劃線的跨表查詢

-連表查詢
-一對一雙下劃線查詢
   -正向:按字段,跨表能夠在filter,也能夠在values中
   -反向:按表名小寫,跨表能夠在filter,也能夠在values中

聚合查詢

# 計算全部圖書的平均價格
from django.db.models import Avg
Book.objects.all().aggregate(Avg('price'))

aggregate()是QuerySet的一個終止子句,意思是說,它返回一個包含一些鍵值對的字典。python

分組查詢

# 統計每一本書做者個數
res=Book.objects.all().annotate(c=Count('authors')).values('name','c')
print(res)
終極總結:
values在前,表示group by,在後,表示取值
filter在前,表示過濾(where),在後,表示having(對分組以後的結果再進行過濾)

終極總結:django

values在前,表示group by ,災後表示取值函數

filter在前,表示where(過濾),在後表示having(對分組以後的結果在進行過濾)code

F查詢與Q查詢

F查詢

1.爲了實現某個字段的值與另外一個字段的值相比較對象

2.實現數據修改操做rem

Q查詢

爲了構造與&,或|,非~的關係class

filter的條件都是and關係 能夠經過Q函數實現與或非import

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息