假定models中有一个类BookInfo
模块查询不同于sql语句,模块查询的结果会返回符合条件的整个一行的对象,或者多个对象组成的查询集。
查询集类似列表,有相似的方法。
1 model查询语句:
1 get(条件) 查询一条 多条或者没有数据会抛出异常 返回一个BookInfo对象
BookInfo.objects.get(id = 1) #查询bookinfo表中id为1的数据
2 all() 查询所有 不能加条件 返回一个查询集 类似列表,有和列表一样的方法
BookInfo.objects.all() #查询bookinfo表中所有的数据
3 filter(条件) 查询符合条件的全部对象 返回一个查询集
BookInfo.objects.filter(isDelete = false)
4 exclude(条件) 查询不符合条件的所有 返回一个查询集
2 查询条件: 模型类属性__条件 = 值
1 判断相等: __exact 可以省略条件,直接 属性= 值
BookInfo.objects.filter(id__exact = 1) #查询表中id是1的
2 模糊查询 包含: __contains
BookInfo.objects.filter( btitle__contains = "传" ) #查询表中 btitle字段包含 传 的
3 开头 结尾: __startswith __endwith
BookInfo.objects.filter( btitle__endswith="") #查询btitle 以 "" 为结尾的
BookInfo.objects.filter( btitle__startswidth = "")
4 空查询: __isnull __isnotnull = True/False
BookInfo.objects.filter( btitle__isnull = False )
5 查询范围 __in = 元组/列表
BookInfo.objects.filter( bid__in = [1,3,5] )
6 比较大小 __gt大于 __gte大于等于 __lt小于 __lte小于等于
BookInfo.objects.filter( id__gt = 3 ) # id大于3
7 查询日期 __year __mont __day __weekday __hour __second
BookInfo.objects.filter(bpub_date__year = 1980) # 查询1980年
BookInfo.objects.filter( bpub_date__gt = date(1980,1,1) ) #大于指定日期
3 多个属性的比较: 引入F对象
#例:查询阅读量大于等于评论量的图书。 from django.db.models import F list = BookInfo.books.filter(bread__gte=F('bcommet'))
4 逻辑 与 或 非
#例:查询阅读量大于20,并且编号小于3的图书。 list=BookInfo.books.filter(bread__gt=20,id__lt=3)
#或者
list=BookInfo.books.filter(bread__gt=20).filter(id__lt=3)
Q对象可以使用 &表示逻辑与,|表示逻辑或,~表示非not。
from django.db.models import Q
#例:查询阅读量大于20,或编号小于3的图书,只能使用Q对象实现 list = BookInfo.books.filter(Q(bread__gt=20) | Q(pk__lt=3))
#例:查询编号不等于3的图书。 list = BookInfo.books.filter(~Q(pk=3))
5 聚合函数:
使用aggregate()过滤器调用聚合函数。
聚合函数定义在django.db.models中 Avg,Count,Max,Min,Sum
from django.db.models import Sum
#例:查询图书的总阅读量。
list = BookInfo.books.aggregate(Sum('bread'))
#例:查询图书总数。
list = BookInfo.books.count()