嘻哈飞车族|Django之ORM表高级操作、增删改查、F/Q查询等( 五 )
3.聚合查询需要使用到:aggregate关键字
from django.db.models import Max,Min,Avg,Count,Sum# 导入模块res = models.Book.objects.aggregate(avg_num=Avg('price'))print(res)# 查询价格最贵的书res = models.Book.objects.aggregate(max_num=Max('price'))print(res)# 全部使用一遍res = models.Book.objects.aggregate(Avg("price"), Max("price"), Min("price"),Count("pk"),Sum('price'))print(res)
4.分组查询需要使用到:annotate关键字
# 1.统计每一本书的作者个数res = models.Book.objects.annotate(author_num=Count('authors')).values('title','author_num')print(res)# 2.统计出每个出版社卖的最便宜的书的价格res = models.Publish.objects.annotate(min_price=Min('book__price')).values('name','min_price','book__title')print(res)# 3.统计不止一个作者的图书res = models.Book.objects.annotate(author_num=Count('authors')).filter(author_num__gt=1).values('title')print(res)# 4.查询各个作者出的书的总价格res = models.Author.objects.annotate(price_sum=Sum('book__price')).values('name','price_sum')print(res)
如何按照表中的某一个指定字段分组?
res = models.Book.objects.values('price').annotate()就是以价格分组
5.F查询在上面所有的例子中 , 我们构造的过滤器都只是将字段值与某个我们自己设定的常量做比较 。 如果我们要对两个字段的值做比较 , 那该怎么做呢?
Django 提供 F() 来做这样的比较 。 F() 的实例可以在查询中引用字段 , 来比较同一个 model 实例中两个不同字段的值 。
简而言之:F()查询可以动态获取表字段对应的值
需要导入模块:from django.db.models import F,Q
案例:
# 1.查询库存数大于卖出数的书籍res = models.Book.objects.filter(kucun__gt=F('maichu'))print(res)# 2.将所有书的价格提高100res = models.Book.objects.update(price=F('price') + 100)
6.Q查询','逗号隔开是and关系'|'管道符是or的关系'~'是not关系
filter() 等方法中逗号隔开的条件是与的关系 。如果你需要执行更复杂的查询(例如OR语句) , 你可以使用Q对象 。
示例1:
查询 卖出数大于100 或者 价格小于100块的
from django.db.models import Qmodels.Product.objects.filter(Q(maichu__gt=100)|Q(price__lt=100))
# 1.查询书的名字是python入门或者价格是1000的书籍res = models.Book.objects.filter(title='python入门',price=1000)# and关系res = models.Book.objects.filter(Q(title='python入门'),Q(price=1000))# 逗号是and关系res = models.Book.objects.filter(Q(title='python入门')|Q(price=1000))# |是or关系res = models.Book.objects.filter(~Q(title='python入门')|Q(price=1000))# ~是not关系
7.Q的高阶用法res = models.Book.objects.filter('title'='python入门')q = Q()q.connector = 'or'# q对象默认也是and关系可以通过connector改变orq.children.append(('title','python入门'))q.children.append(('price',1000))res = models.Book.objects.filter(q)print(res)
选择了IT , 必定终身学习
作者:Jeff
【嘻哈飞车族|Django之ORM表高级操作、增删改查、F/Q查询等】出处:
- ZAKER| 男子恼羞成怒小区内上演“亡命飞车”,怀疑老婆出轨
- 案件侦办|怀疑老婆出轨男子恼羞成怒小区内上演“亡命飞车”
- 几品飞车|一大波录取通知书到来 华为nova7 Pro给考后生活添色彩
- 嘻哈小甜甜|Deft卢锡安下路通关打崩Mystic DRX2:0战胜AF
- 上观新闻|研究“王者荣耀KPL”与“QQ飞车”?全球移动电竞文化研究院在沪落地
- 女司机珠海大桥遇惊魂!大车飞车侧翻被压瞬间,她做这件事捡回一命!
- 嘻哈飞车族|FOCAL品牌第一款封闭式大耳 聊聊Elegia近日来的使用感受
- 嘻哈小甜甜|王者荣耀:周年庆回城特效已确定,能量条英雄加强,43位英雄普攻动画优化
- 光明网|怀疑老婆出轨 他恼羞成怒小区内上演“亡命飞车”
- 海峡网|DrakSun孩子王是谁 vava男友也是嘻哈歌手真名个人资料