八.django模型系统(二)之常用查询及表关系的实现
Ⅰ.常用查询
1.几个概念
每一个django模型类,都有一个默认的管理器,objects
,查询就是依赖于objects
管理器进行的(在创建时就被添加了)。
QuerySet表示数据库中对象的列表(QuerySet也是一个类)。它可以有0到多个过滤器。过滤器通过给定参数,缩小查询范围。(filter)
QuerySet等同于select语句,过滤器是一个限制子句,比如where,比如limit。
1)环境进入
2.常用查询代码
1)QuerySet 的方法(查询方法)
all() 获取所有
Student.objects.all() # 返回的是queryset
获取第一个条
Student.objects.first() # 返回的是对象
获取最后一条
Student.objects.last() # 返回的是对象
get(**kwargs)根据给定的条件获取一个对象,如果符合多个,或没有就会报错
fitler(**kwargs)过滤,根据参数提供的条件,获取一个过滤器后的QuerySet,多个条件等同于
select子句
使用and连接,关键字参数的形参必须是模型中的字段名。Student.objects.filter(name='Michael_Lxh').filter(age=16) #效果:实现筛选叠加
exclude(**kwargs), 用法和filter一样,作用相反,它是排除
order_by(*fields),根据给定的字段排序。
Student.objects.order_by('-age', 'name').query) # 默认asc,-age 代表反向排序
切片 使用列表的切片语法操作query,除了不能用负索引,其他的都可以,它等价于LIMIT与OFFSET子句
values(*fields)返回queryset, 这个queryset返回的是一个字典列表。参数fields指定了select中我们想要限制查询的字段。返回的
字典
列表中,只会包含我们指定的字段。如果不指定,包含所有字段。only(*fields)返回一个queryset,跟values一样,区别在于这个queryset是对象列表,并且only一定包含主键。(永远有一个id)
defer(*fields) 用法与only相反(表中除了某个不要,其他都要)
多条件OR连接,需要实现OR条件,我们要使用Q对象。
from django.db.models import Q
res = Student.objects.filter(Q(age=18)|Q(age=19)).only('name')
#上面语句 等价于 下面的sql
SELECT `teacher_student`.`id`, `teacher_student`.`name` FROM `teacher_student` WHERE (`teacher_student`.`age` = 18 OR `teacher_student`.`age` = 19)
2)查询条件
exact 精确匹配(等价于 =)
iexact 忽略大小写
contains % %
icontains % % 下忽略大小写
in
gt great than (>)
gte great than equ (≥)
lt less than
Ite less than equ
startwith 以什么什么开始
istartwith 以什么什么开始下忽略大小写
endwith 以什么什么结尾
iendwith 以什么什么结尾下忽略大小写
range 范围区间
isnull 要么是True或是False
语法均是field__conditon
,其中是两个下划线
3)实际例子(查询方法)
a.几个常见情况汇总
b.顺序问题
c.切片问题
d.关于value的内容
e.关于defer的用法
f. 关于or的用法
4)实际例子(查询条件)
a.关于exact和iexact的用法
b.关于in和大于等于等方法
c.关于isnull用法
5)聚合函数
count 统计数量( count( ) 返回queryset的长度) (并非聚合函数内的用法)
a.实例
Avg 平均值
#计算同学们的年龄平均值(如下例):
from django.db.models import Avg,Max,Min,Sum
res = Student.objects.aggregate(age_avg=Avg('age'))
res
Max 最大值
#找到年龄最大的学生(如下例):
from django.db.models import Avg,Max,Min,Sum
res = Student.objects.aggregate(age_max=Max('age'))
res
Min 最小值
Sum 求和
b.实例
6)分组
聚合、分组需要结合values,annotate和聚合方法,参见如下案例:
a.查询男生女生多少人
Ⅱ.常用的模型字段类型
1.常用的字段类型映射关系
2.常用的字段类型
Ⅲ.Field的常用参数
Ⅳ.表关系的实现
django中,模型通过特殊的字段进行关系连接
1.一对一
2.一对多
3.多对多
官方文档:https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-types
八.django模型系统(二)之常用查询及表关系的实现的更多相关文章
- Django入门--模型系统(二):常用查询及表关系的实现
1.常用查询 模型类上的管理器: ** 模型类.objects ** (1)常用一般查询 rs = Student.objects.all() # 查询所有记录,返回Queryset print(rs ...
- Django 07 Django模型基础2 (常用查询和多表关联)
Django 07 Django模型基础2 (常用查询和多表关联) 一.常用查询 #查找数据 def search_user(request): #获取 rs = User.objects.first ...
- django模型系统二
常用查询及表关系的实现 1.常用查询 每一个django模型类,都有一个默认的管理器 objects QuerySet表示数据库中对象的列表,它可以有0到多个过滤器.过滤器通过给定参数,缩小查询范围. ...
- python的Web框架,Django模型系统二,模型属性,及数据库进阶查询
原始数据接上篇文章来操作.可能需要查看后才能懂.点击这里查看 1.常用的模型字段类型 官方文档:https://docs.djangoproject.com/en/2.1/ref/models/fie ...
- 七、Django模型基础第二节——常用查询
1 常用的模型字段类型 官方文档链接: https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-types 常用的字段类型 模型字 ...
- Django框架基础知识07-常用查询及表关系的实现
1.常用的模型字段类型 https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-types 2.字段的常用参数 官方文档:http ...
- django模型系统(二)
django模型系统(二) 常用查询 每一个django模型类,都有一个默认的管理器,objects QuerySet表示数据库中对象的列表.他可以有0到国歌过滤器.过滤器通过给定参数,缩小查询范围( ...
- {django模型层(二)多表操作}一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询、分组查询、F查询和Q查询
Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 xxx 七 ...
- day 70 Django基础五之django模型层(二)多表操作
Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 ORM ...
随机推荐
- 如何搭建基于C#和 Appium 的 Android自动测试环境
本文由葡萄城技术团队于博客园原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 如果想做手机端的自动化测试,Appium是首选的测试框架,因为网上使 ...
- Jmeter接口测试实战-数据传递
Jmeter接口测试实战-数据传递 接口与接口之间没有关联的测试是缺乏意义和没有灵魂的,只有数据在不同接口之间传递才能勾画出业务场景重要的链路. 我们用较为通用的http/https协议,接口普遍返回 ...
- Android Studio导包无效,全部报红
今天在转移项目到新的机器上的时候,出现了所有的导入失效,import不起作用,但是原有代码又能正常运行,在大佬的帮助下找到了这篇博客: https://blog.csdn.net/mr_chenxu/ ...
- 解析SQL Server之任务调度
在前面两篇文章中( 浅谈SQL Server内部运行机制 and 浅谈SQL Server数据内部表现形式 ),我们交流了一些关于SQL Server的一些术语,SQL Sever引擎 与SSMS抽象 ...
- Linux运维跳槽必备的40道面试精华题(转)
Linux运维跳槽必备的40道面试精华题(转) 下面是一名资深Linux运维求职数十家公司总结的Linux运维面试精华,助力大家年后跳槽找个高薪好工作. 1.什么是运维?什么是游戏运维? 1)运维 ...
- 如何自己制作CHM电子书?
软件介绍: EasyCHM 非常适合个人和单位制作高压缩比的有目录.索引,同时具有全文检索及高亮显示搜索结果的网页集锦.CHM格式的帮助文件.专业的产品说明书.公司介绍.文章集锦.CHM电子书等等. ...
- 北京大学冯哲清北学堂讲课day1
贪心方案: 答案是第三个策略 二分的一个重点是有顺序性,只有满足这个件才可以二分判断区间,否则你得自己构造顺序. 洛谷跳石头同题: 首先,我们要最小化最大跳远距离 代码如下(此题) #include& ...
- jeecg入门操作—字典配置
一.字典入口 系统 管理->数据字典 二.录入字典 填写字典相关信息 三 .添加字典内容 填写字典某条记录内容 再录入几条 录入之后的字典内容 四.使用字典 1.编辑用户表单,添加用户等级字段 ...
- JS中事件绑定函数,事件捕获,事件冒泡
1 事件绑定:事件与函数绑定以及怎么取消绑定 1.1 元素.onclick这种形式,如下: <div id="div1">aaa</div> <scr ...
- spring整合quartz异常:org.quartz.JobPersistenceException: Couldn't clean volatile data: Unknown column 'IS_VOLATILE' in 'where clause'
自己的SSM项目中要用到定时器,初期使用Timer,后来用spring 的schedule,都比较简单,所以功能比较单一.后来就研究quartz,准备整合到项目中.遇到了异常,异常内容如下: [201 ...