W
e
l
c
o
m
e
: )

Django 查询

模型查询

概述

1:查询集表示从数据库中获取对象的集合
2:查询集可以有多个过滤器
3:过滤器就是一个函数,基于所给的参数限制查询集结果
4:从sql来说,查询集与select等价

关于查询集

1:在管理器上调用过滤方法返回查询集
2:查询集经过筛选器后返回新的查询集,所以可以写成链式调用
3: 惰性执行

创建查询集不会带来任何数据的访问,知道调用数据时(用),才会访问数据库

直接访问数据的情况

迭代
序列化
与if合用

过滤器

返回查询集的方法叫过滤器
all()->不过滤
filter()->返回符合条件的数据
filter(键=值,键=值)
filter(键=值).filter(键=值) ps:两个条件是且的关系
exclude()->过滤掉符合条件的数据
order_by()->排序
values()->一条数据就是一个对象(字典样式)返回一个列表

返回单个结果

get() 返回一个满足条件的对象,如果没有找到或找到多条都会引发异常。
count()返回当前查询集中的对象个数
first()返回查询集中的第一个对象
last()返回查询集中的最后一个对象
exists()判断查询集中是否有数据,要是有,返回true

限制查询集

查询集返回列表,可以用下标进行限制,等同于sql的limit语句
注意:下标不能为负数
例:stu=grades.stuobj.all()[0:5]

查询集的缓存

概述:每个查询集都包含有一个缓存,来最小化数据库访问

字段查询

概述:实现了sql中的where语句,作为filter(),exclude(),get()的参数
语法:属性名称__比较运算符=值
外键:属性名_id
比较运算符:
exact:判断,区分大小写
contains:是否包含,区分大小写 例:

stulist=grade.Objects.filter(gname_contains='李')#这就查询了名字中包含李的结果
startswith,endswith stulist=grade.Objects.filter(gname_startswith='李')

以上前面加上i,就不区分大小写了
null,isnotnull:同上同理
in:是否在范围内 例:

stulist=grade.Objects.filter(pk__in[2,4,6,8,10])结果集为序号为2,4,6,8,10的

gt,gte,lt,lte对应:大于,大于等于,小于,小于等于。例:

stulist=grade.Objects.filter(age__gt=20)年龄大于20的

year,month,day,hour,week_day等
查询快捷:pk:代表主键

聚合函数

用哪个函数就引入哪个包
语法:类名.obj.aggregate(函数)
函数包括:Max,Min,Avg,Sum等
例:

from django.db.models import Max
max_age=Grade.objects.aggregate(Max('sage'))
posted @ 2020-03-20 16:47  rmxob  阅读(144)  评论(0)    收藏  举报