Django的分组查询 ,F查询,Q查询,Raw查询

Django的分组查询 ,F查询,Q查询,Raw查询

django的分组查询

分组查询在django当中不可以使用group_by,需要用annotate。

mysql
Select  AVG(price)  from  goods  group_by  goods_type
Select  count(price)  from  goods  group_by  goods_type
ORM
 from django.db.models import Sum,Count,Min,Max,Avg
 from Shopapp.models import *
#以goods_type分组,查询每个分组的价格平均值
Goods.objects.values(“goods_type”).annotate(avg_price = Avg(“goods_price”))

#以goods_type分组,查询每个分组数量
Goods.objects.values(“goods_type”).annotate(avg_price = Count(“goods_price”))
ORM分组还是要和聚类查询结合
F 查询,比较的是字段
#当前查询条件只能和固定的值进行比较
 Goods.objects.filter(goods_number__gt = 100).values('goods_name')

#查询所有数量大于等于价格的商品
Goods.objects.filter(goods_number__gte = F('goods_price')).values('goods_name')

#F查询支持基本数学运算
#查询所有数量大于等于价格2倍的商品
Goods.objects.filter(goods_number__gte = F('goods_price')*2).values('goods_name')
Q 查询支持逻辑and(&)和or(|)

Q的出现补充了filter的缺陷,,,,Filter的查询条件固定是and关系

 # 查询数量大于等于501以及价格小于100的商品
 Goods.objects.filter(Q(goods_number__gte = 501)&Q(goods_price__lt = 100)).values('goods
_name')
  # 查询数量大于等于501或者价格小于100的商品
 Goods.objects.filter(Q(goods_number__gte = 501)|Q(goods_price__lt = 100)).values('goods
_name')                                                                             

Raw查询(原生sql查询)

通常为了提高查询效率,工作当中更支持原生查询,ORM只被作为数据插入,修改,删除的方法

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值