django orm高級查詢 F表達式和Q表達式以及分組annotate


1.關聯關系映射及查詢
1.1django默認開啟延遲加載所有多對1和1對1如果不使用select_related(),需要會延遲加載獲取到相關對象,因為延遲可能會造成n+1次查詢的問題,所以便有了
select_related()進行急迫抓取;
1.2django默認不會去取多對多的的多方,除非使用prefetch_related('roles'), 【User的class中申明 roles = models.ManyToManyField("Role") 

1.3django不需要配置1對多這種關系,A的子表B映射了foreignKey,django會底層給附表A的類加上一個b_set,當然此名字(b_set)可以用foreignKey的參數related_name指定
2.F表達式:
from django.db.models import F
(忘記了可以在已有項目中搜索)
獲取字段1<字段2的數據-->querySet.filter(field1__lt=F('field2'))

3.Q值表達式:
from django.db.models import Q (忘記了可以在已有項目中搜索)

視頻參見:https://www.imooc.com/learn/1087 (全部orm查數據庫知識都包含了)
網頁參見:https://www.colabug.com/2309808.html https://www.cnblogs.com/fqh202/p/9115121.html https://cn.aliyun.com/jiaocheng/451495.html


django的分組使用annotate,如:RebotPhone.objects.values('status').annotate(count = Count('phone_id')).values('status','count').order_by()
第一個values是分組字段,第二個values是需要查詢的字段, order_by():默認的排序字段也會自動加入到GROUP BY子句中. 要避免這樣的情況,只需在查詢時清空默認的order by



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM