Django的mode的分组查询和聚合查询和F查询和Q查询
生活随笔
收集整理的這篇文章主要介紹了
Django的mode的分组查询和聚合查询和F查询和Q查询
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、聚合查詢
# 聚合函數aggregate,求指定字段的最大值,最小值,平均值,和的值,方法如下from django.db.models import Avgfrom django.db.models import Sumfrom django.db.models import Maxfrom django.db.models import Minobj = models.book.objects.all().aggregate(Avg("Book_price"))print(obj)obj = models.book.objects.all().aggregate(Sum("Book_price"))print(obj)obj = models.book.objects.all().aggregate(Max("Book_price"))print(obj)obj = models.book.objects.all().aggregate(Min("Book_price"))print(obj)
2、分組查詢
# 分組查詢# 首先把書籍通過作者進行分組,然后求每個作者的書的價格的平均值obj = models.book.objects.all().values("Book_Auther").annotate(Avg("Book_price"))print(obj)
3、F查詢和Q查詢
我們先提出一個問題,就是我們要把書這張表中的所有書的價格都加1000,該如何實現呢?我們可以用下面的方法實現
id_list = models.book.objects.all().values_list("id")# obj = models.book.objects.all()for i in id_list:new_price = models.book.objects.filter(id=i[0])[0].Book_price + 1000models.book.objects.filter(id=i[0]).update(Book_price=new_price)
?
# id_list = models.book.objects.all().values_list("id")# # obj = models.book.objects.all()# for i in id_list:# new_price = models.book.objects.filter(id=i[0])[0].Book_price + 1000# models.book.objects.filter(id=i[0]).update(Book_price=new_price)# F查詢作用很局限,就是對某列的數據做操作,比如我們為價格這一列全部加10000,只能對數字列做操作,而且不能使用雙下劃線的屬性from django.db.models import F# models.book.objects.all().update(Book_price=F("Book_price")+10000)# Q查詢:我們之前查詢的規則,比如filter中的規則,雖然可以寫多個過濾條件,但是這些條件只能是and的關系,如果是or的關系,fileter就做不到了# 這里就需要用到Q查詢# Q方法取或用“|”,去交集用 “&”from django.db.models import Q# 比如我們用到id大于5,或者價格大于10000的對象,或方法用一個管道符的方法# 取并集obj = models.book.objects.filter(Q(Book_price__gt=11000)|Q(id=2))print(obj.values("Book_price","id"))# 去交集obj = models.book.objects.filter(Q(Book_price__gt=11000) & Q(id=2))# Q查詢和字段查詢可以混合使用,但是字段必須要放在最后obj = models.book.objects.filter(Q(Book_price__gt=11000) & Q(id=2),Book_info__contains="aaaa")return HttpResponse("test5")
?傳入條件查詢
q1 = Q() q1.connector = 'OR' q1.children.append(('id', 1)) q1.children.append(('id', 2)) q1.children.append(('id', 3))models.Tb1.objects.filter(q1)?
合并條件查詢
con = Q()q1 = Q() q1.connector = 'OR' q1.children.append(('id', 1)) q1.children.append(('id', 2)) q1.children.append(('id', 3))q2 = Q() q2.connector = 'OR' q2.children.append(('status', '在線'))con.add(q1, 'AND') con.add(q2, 'AND')models.Tb1.objects.filter(con)?
轉載于:https://www.cnblogs.com/bainianminguo/p/9080275.html
總結
以上是生活随笔為你收集整理的Django的mode的分组查询和聚合查询和F查询和Q查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 重读ORB_SLAM之Tracking线
- 下一篇: Nginx入门到实战(4)常见问题