python_django—day36(笔记)

主要内容:

1.集合&查询单个数据&切片

(1)查询集与过滤器
在管理器上调用方法返回查询集。
查询经过过滤器筛选后返回新的查询集,所以可以写成链式调用。
返回查询集的方法称为过滤器。
all() 返回所有数据
filter() 返回符合条件的数据
exclude() 过滤到符合条件的数据
order_by 排序
values() 一条数据就是一个字典,返回一个列表
1)默认按照id进行排序,-id表示降序排列
persons = Person.objects.order_by(’-id’)
在这里插入图片描述
2)person_values = persons.values()以字典的形式返回
在这里插入图片描述
{‘id’: 3, ‘p_name’: ‘zhangsan’, ‘p_age’: 28, ‘p_sex’: False}
{‘id’: 2, ‘p_name’: ‘lili’, ‘p_age’: 22, ‘p_sex’: True}
{‘id’: 1, ‘p_name’: ‘jack’, ‘p_age’: 20, ‘p_sex’: False}
(2)获取单个数据
1)get():返回一个满足条件的对象,如果没有找到符合条件的对象,会引发模型类.DoesNotExits异常;如果找到多个,会引发模型类.MultiObjectsReturned异常
在这里插入图片描述

2)first():返回查询集中的第一个对象
在这里插入图片描述

3)last():返回查询集中的最后一个对象
注意:隐藏的bug,可能会出现first和last获取到的是相同的对象,解决方案:显式,手动写排序规则
在这里插入图片描述

4)count():返回当前查询集中的对象个数
在这里插入图片描述

5)exists():判断查询集中是否有数据,如果有数据返回True
在这里插入图片描述

补充内容—状态码:
2xx :请求成功
3xx:转发或重定向
4xx:客户端错误
5xx:服务器错误

2.Model查询

(1)限制查询集和查询集的缓存
限制查询集,可以使用下标的方法进行限制,等同于sql中的limit
studentlist = Student.objects.all[0:5] //下标不能是负数
查询集的缓存:每个查询集都包含一个缓存,来最小化对数据库的访问。在新建查询集中,缓存首次为空,第一次对查询集求值,会发生数据缓存。django会将查询出来的数据做一个缓存,并返回查询结果,以后的查询直接使用查询集的缓存。
(2)字段查询
对sql中where的实现,作为方法filter(),exclude(),get()的参数。
外键:属性名_id 转义:like语句中使用%是为了匹配占位,匹配数据中的%
(where like ‘%’)
filter(sname__contains=’%’)
语法:属性名称__比较运算符=值
1)比较运算符:gt、lt、gte、lte、in、
contains包含,类似于模糊查询的like,大小写敏感、
startswith以xx开始、
endswith以xx结束
exact
以上四个在运算符前面加上i,就不区分大小写了(icontains、istartswith、endswith、iexact)
2)isnull、isnotnull是否为空,filter(sname__isnull=False)
3)通过时间查询
year、month、day、week_day、hour、minute、second
filter(lasttime__year)
注意:django中查询条件有时区问题,解决方案:1.关闭django中自定义的时区 USE_TZ=False
2.在数据库中创建对应的时区表
4)pk:代表主键,filter(pk=1)
5)跨关系查询:模型类名__属性名_比较运算符,实际上是处理的数据库中的join
grade=Grade.objects.filter(student__s_name='jack)
描述中带有jack的数据属于哪个班级
在这里插入图片描述
6)聚合函数
使用aggregate()函数返回聚合函数的值
Avg 平均值
Count 数量
Max 最大
Min 最小
Sum 求和
Student.objects.aggregate(Avg(‘s_age’))
在这里插入图片描述
7)F对象
可以使用模型的A属性与B属性进行比较
grades = Grade.objects.filter(ggirlnum__gt=F(‘gboynum’))
F对象支持算数运算
grades = Grade.objects.filter(ggirlnum__gt=F(‘gboynum’)+10)
在这里插入图片描述
获取男生人数比女生人数多30人以上的公司名称
companies = Company.objects.filter(c_boynum__gt=F(‘c_girlnum’)+30)
在这里插入图片描述
8)Q对象
过滤器的方法中的关键参数,常用于组合条件
年龄小于25
Student.objects.filter(Q(sage__lt=25))
Q对象支持 |(or) &(and) ~(取反)
年龄大于等于的
Student.objects.filter(~Q(sage__lt=25))
在这里插入图片描述

3.ModelManager的定制

(1)模型成员
显式:自己写的那些
隐式:objects是一个Manager类型的一个对象,作用于数据库进行交互。
当模型类没有指定管理器的时候,Django会自动为我们创建模型管理器,当然我们也可以自定义管理器。
class Student(models.Model):
stuManager=models.Manager()
当自定义模型管理器时,objects就不存在了,Django就不会为我们自动生成模型管理器
在这里插入图片描述
在这里插入图片描述
(2)自定义管理类
模型管理器是Django的模型与数据库进行交互的接口,一个模型可以有多个模型管理器。
自定义模型的作用:
可以向管理器中添加额外的方法
修改管理器返回的原始查询集
提供创建对象的方式
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值