DJANGO OPM模型
1、判断(判等) exactaa
查询编号为1的图书
BookInfo.book.filter(id=1)
BookInfo.book.filter(id__exact=1)
注意:exact可以省略
2、模糊查询
查询书名包含"传"的图书 contains
BookInfo.book.filter(btitle__contains='传')
查询书名以"射"开头
BookInfo.book.filter(btitle__startswith='射')
查询书名以狐结尾的
BookInfo.book.filter(btitle__endswith='狐')
3、空值查询 isnull
查询书名不为空的图书
BookInfo.book.filter(btitle__isnull=False)
4、范围查询 where id in (1,3,5)
查询编号为1或3或者5的图书
BookInfo.book.filter(id__in=[1,3,5])
5、比较查询 gt lt(less than) gte lte
查询编号大于等于3的图书
BookInfo.book.filter(id__gte=3)
6、日期查询
查询1980年发表的书
BookInfo.book.filter(bpub_date__year=1980).values()
查询1980年1月1日后发表的图书有几本书
BookInfo.book.filter(bpub_date__gt=date(1980,1,1)).count()
7、exclude:返回不满足条件的数据 --->filter取反
查询所有id不为3的图书有多少本
BookInfo.book.exclude(id=3).count()
F对象
查询图书阅读量大于评论量的图书信息
BookInfo.book.filter(bread__gt=F('bcomment'))
查询图书阅读量大于2倍的评论量的图书信息
BookInfo.book.filter(bread__gt=F('bcomment')*2)
Q对象
查询id大于3且阅读量大于30的图书信息
#方案1
BookInfo.book.filter(id__gt=3,bread__gt=30)
#方案2
BookInfo.book.filter(Q(id__gt=3)&Q(bread__gt=30))
查询id大于3或者阅读量大于30的图书信息
BookInfo.book.filter(Q(id__gt=3)|Q(bread__gt=30))
查询id不等于3图书的信息
BookInfo.book.filter(~Q(id=3))
#"负负得正"
BookInfo.book.exclude(~Q(id=3)).values()
order_by
查询所有图书的信息,按照id从小到大进行排序。
BookInfo.book.all().order_by('id').values()
查询所有图书的信息,按照id从大到小进行排序。
BookInfo.book.all().order_by('-id').values()
把id大于3的图书信息按阅读量从大到小排序显示;
BookInfo.book.filter(id__gt=3).order_by('-bread')
聚合函数
查询所有图书的数目 select count(*) from booktest_bookinfo;
BookInfo.book.aggregate(Count('id'))
查询所有图书阅读量的总和
BookInfo.book.aggregate(Sum('bread'))
统计id大于3的所有图书的数目
BookInfo.book.filter(id__gt=3).aggregate(Count('id'))
显示阅读量最大的书的书名
BookInfo.book.all().order_by('-bread')[0]
查询相关函数返回值总结
get:返回一个对象
all:QuerySet(也就是[])
filter:QuerySet
exclude:QuerySet
order_by:QuerySet
aggregate:字典
count:值
通过对象执行关联查询
查询图书id为1的所有英雄信息
b=BookInfo.book.get(id=1)
b.heroInfo_set.all()
查询id为1的英雄所属图书信息
h = HeroInfo
格式:
由一类的对象查询多类的时候:一类的对象.多类名小写_set.all() #查询所用数据
由多类的对象查询一类的时候:多类的对象.关联属性 #查询多类的对象对应的一类的对象
由多类的对象查询一类对象的id时候:多类的对象. 关联属性_id