字段查询
条件查询
1. 判等 exact
list.objects.filter(id=1),直接查询唯一ID
list.objects.filter(id__exact=1)此处的exact可以省略
2.包含查询 contains
Demo:查询脚本类型中包含‘脚本’的数据
list.objects.filter(L_name__contains='脚本')
3.查询以***开头 startswith
Demo:查询以“脚本”开头的数据
list.objects.filter(L_name__startswith='脚本')
4.查询以***结尾 endswith
Demo:查询以“脚本”结尾的数据
list.objects.filter(L_name__endswith='脚本')
5.查询不为空的字段名
Demo:字段名是L_name,查询这个字段,值为False查询不为空
list.objects.filter(btitle__L_name=False)
6.范围查询 in
Demo:查询id为1、4、5的数据
list.objects.filter(id__in=[1,4,5])
7.查询的比较运算符
gt:大于
Demo:查询id大于3
list.objects.filter(id__gt=3)
lt:小于
Demo:查询id小于3
list.objects.filter(id__lt=3)
gte:大于等于
Demo:查询id大于等于3
list.objects.filter(id__gte=3)
lte:小于等于
Demo:查询id小于等于3
list.objects.filter(id__lte=3)
F对象
作用:用于类属性之间的比较条件
使用之前需要导入from django.db.models import F
比如查询销售量大于下载量 L_sales_volume>L_site
list.objects.filter(L_sales_volume__gt = F(‘L_site’))
比如查询销售量大于下载量*2 L_sales_volume>L_site
list.objects.filter(L_sales_volume__gt = F(‘L_site’)*2)
Q对象
作用:用于查询时的逻辑条件
使用之前需要导入from django.db.models import Q
比如查询销售量不等于10 volume
list.objects.filter(~Q(volume=3))
比如查询销售量大于10且下载量大于10volume>site
list.objects.filter(Q(volume__gt=10) && Q(site__gt=3))
比如查询销售量大于10或下载量大于10volume>site
list.objects.filter(Q(volume__gt=10) || Q(site__gt=3))
排序查询
查询所有表的信息,按照id从小到大进行排序
list.objects.all()order_by('id')
查询所有表的信息,按照id从大到小进行排序
list.objects.all().order_by('-id')
把id大于3的表信息按销量从多到少排序显示
list.objects.filter(id__gt=3).order_by('-bread')
聚合函数
sum 求和
count 计数
avg 平均值
max 最大值
min 最小值
- aggregate:调用这个函数来使用聚合
使用前需先导入聚合类:
from django.db.models import Sum,Count,Max,Min,Avg
查询所有产品的数目
list.objects.aggregate(Count('id'))
查询所有销量的总和 volume
list.objects.aggregate(Sum(‘volume’))
查询销售最高的数据 volume
list.objects.all().aggregate(Max(‘volume’))
查询销售最低的数据 volume
list.objects.all().aggregate(min(‘volume’))
查询所有软件平均销售的数据 volume
list.objects.all().aggregate(avg(‘volume’))
count函数 还可以如下写法
查询所有产品的数目
list.objects.all().count()
统计大于10的销售量 volume
list.objects.filter(volume__gt = 10).count()
关联查询
作用:对查询结果进行聚合操作(等同数据库的聚合函数)
一对多的关联查询
查询图书id为1的所有英雄的信息。
b = BookInfo.objects.get(id=1)
b.heroinfo_set.all()
多对多的关联查询
查询id为1的英雄所属图书信息。
h = HeroInfo.objects.get(id=1)
a=h.hbook
通过模型类实现关联查询
查询图书,要求图书中英雄的描述包含'八'。Join
BookInfo.objects.filter(heroinfo__hcomment__contains='八')
例:查询图书,要求图书中的英雄的id大于3.
BookInfo.objects.filter(heroinfo__id__gt=3)
例:查询书名为“天龙八部”的所有英雄。
HeroInfo.objects.filter(hbook__btitle = '天龙八部')