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只被作为数据插入,修改,删除的方法