Django框架基础知识07-常用查询及表关系的实现
1.常用的模型字段类型 https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-types
2.字段的常用参数 官方文档:https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-options
3.常用查询 通过模型类上的管理器来构造QuerySet。
模型类上的管理器是啥? 模型类.objects,<django.db.models.manager.Manager>实例
QuerySet 表示数据库中对象的集合。 等同于select 语句。 惰性的,不会立刻操作数据库,在计算,循环,切片,索引时会执行select语句. 案例:
first() 获取第一条 返回的是对象
last() 获取最后一条 返回的也是一个对象 思考:排序规则? 默认通过主键。通过_meta 设置
get(**kwargs) 根据给定的条件,获取一个对象,如果有多个对象符合,报错.
all() 获取所有记录 返回的是queryset
filter(**kwargs) 根据给定的条件,获取一个过滤后的queryset,多个条件使用and连接。
exclude(**kwargs) 跟filter使用方法一致,作用想反,它是排除。
多条件的OR连接 用到Q对象,django.db.models.Q 例子: Students.objects.filter(Q(age=18)|Q(age=19))
values(*fields) 返回一个queryset,返回一个字典列表,而不是数据对象。 例子:Students.objects.values('name','age')
only(*fields) 返回querySet ,对象列表,注意only一定包含主键字段,在实际开发过程中比较常用,可以灵活取值.
defer(*fields) 指定想要排除的字段.返回一个QuerySet,作用和only相反.
order_by(*fields) 根据给定的字段来排序 默认是顺序,字段名前加上 ‘-’代表反序
切片 和python的列表切片用法相似,支持步长,不支持负索引,数据量大时尽量不用步长,速度慢. 切片过后,不再支持,附加过滤条件与排序,因为已经执行返回列表. 例子:Students.objects.all()[:5:2]
常用查询条件 filter,exclude, get,
加两个下划线使用,如name__contains.
exact 准确匹配
iexact 不区分大小写,query中是LIKE
contains 包含,query中的BINARY是区分大小写.
icontains 不区分大小写包含.
in 参数为列表,元组或query_set
range 范围
gt 大于
gte 大于等于
lt 小于
lte 小于等于
startswith 开始是
istartswith 不区分大小写开始是
endswith 结尾是
iendswith 不区分大小写结尾是
isnull True, False 对应 IS NULL, IS NOT NULL
聚合 from django.db.models import Count, Avg, Max, Min, Sum 通过queryset的aggregate方法 Student.objects.aggregate(age_avg=Avg('age')) # 计算平均年龄,age_avg生成一个key.
count
平均值 Avg
分组,聚合 结合 Values,annotate 和聚合方法一起实现 查询男生有几个,女生有几个
from django.db.model. import Count
Student.objects.values('sex').annotate(num=Count('sex'))
4.表关系实现
常用的查询方法:

常用的查询条件:

查找对象的条件的意思是传给以上方法的一些参数。相当于是SQL语句中的where语句后面的条件,语法为字段名__规则(是连着连个下划线哦)
常用的字段类型映射关系:

常用的字段类型:
IntegerField : 整型,映射到数据库中的int类型。
CharField: 字符类型,映射到数据库中的varchar类型,通过max_length指定最大长度。
TextField: 文本类型,映射到数据库中的text类型。
BooleanField: 布尔类型,映射到数据库中的tinyint类型,在使用的时候,传递True/False进去。如果要可以为空,则用NullBooleanField。
DateField: 日期类型,没有时间。映射到数据库中是date类型,
在使用的时候,可以设置DateField.auto_now每次保存对象时,自动设置该字段为当前时间。设置DateField.auto_now_add当对象第一次被创建时自动设置当前时间。
DateTimeField: 日期时间类型。映射到数据库中的是datetime类型,
在使用的时候,传递datetime.datetime()进去。
Field的常用参数:
primary_key: 指定是否为主键。
unique: 指定是否唯一。
null: 指定是否为空,默认为False。
blank: 等于True时form表单验证时可以为空,默认为False。
default: 设置默认值。
DateField.auto_now: 每次修改都会将当前时间更新进去,只有调用,QuerySet.update方法将不会调用。这个参数只是Date和DateTime以及TimModel.save()方法才会调用e类才有的。
DateField.auto_now_add: 第一次添加进去,都会将当前时间设置进去。以后修改,不会修改这个值
1.创建模型类

2.执行生成映射文件的命令后,查看数据表

3.插入数据.

4.查看插入的数据.

表关系的实现:


表关系的例子:

创建模型类:

外键和一对一关系的时候需要加on_delete选项,此参数为了避免两个表里的数据不一致问题,不然会报错!
一般使用CASCADE表示级联删除

查看数据库中创建的表:
写好模型类后,执行生成映射文件的命令.

执行完makemigrations和migrate的命令后,在数据库我们能看到5张表,其中多对多关系的ManyToManyField
方法自动生成了关系表.
Django框架基础知识07-常用查询及表关系的实现的更多相关文章
- Django 07 Django模型基础2 (常用查询和多表关联)
Django 07 Django模型基础2 (常用查询和多表关联) 一.常用查询 #查找数据 def search_user(request): #获取 rs = User.objects.first ...
- Django框架基础知识08-表关联对象及多表查询
1.自定义主键字段的创建 AutoFiled(pirmary_key=True) # 一般不会自定义,int类型,自增长 一般不自定义主键. 2.order_by asc desc from djan ...
- 七、Django模型基础第二节——常用查询
1 常用的模型字段类型 官方文档链接: https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-types 常用的字段类型 模型字 ...
- Django框架基础知识01-配置环境
Django框架 Django是个怎样的东西呢? Web应用框架----Django http服务器:用来接受用户请求,并将请求转发给web应用框架进行处理. Web应用框架处理完以后再发送给htt ...
- Django框架基础知识06-模型基础
1.数据库的连接配置 django 连接mysql的配置流程: 安装 pymysql pip install pymysql 创建数据库用户 有创建数据库权限的用户 创建数据库 crm 修改配置 se ...
- Django框架基础知识12-中间件及上下文处理器
Django中间件(Middleware) 是一个轻量级.底层的“插件”系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出. django 中的中间件(middleware) ...
- 八.django模型系统(二)之常用查询及表关系的实现
Ⅰ.常用查询 1.几个概念 每一个django模型类,都有一个默认的管理器,objects,查询就是依赖于objects管理器进行的(在创建时就被添加了). QuerySet表示数据库中对象的列表( ...
- Django入门--模型系统(二):常用查询及表关系的实现
1.常用查询 模型类上的管理器: ** 模型类.objects ** (1)常用一般查询 rs = Student.objects.all() # 查询所有记录,返回Queryset print(rs ...
- Django框架基础知识13-auth系统
我们昨天登录admin时创建的用户信息是存放在哪里了呢? auth系统的数据表: 从表的名称我们就能看出, auth_user,auth_group,auth_permission分别存放了用户,用户 ...
随机推荐
- 黑客攻防技术宝典web实战篇:攻击应用程序架构习题
猫宁!!! 参考链接:http://www.ituring.com.cn/book/885 随书答案. 1. 假设受攻击的应用程序使用两台不同的服务器:一台应用程序服务器和一台数据库服务器.已经发现一 ...
- LuoguP2657 [SCOI2009]windy数 【数位dp】By cellur925
题目传送门 题目大意:在A和B之间,包括A和B,总共有多少个不含前导零且相邻两个数字之差至少为2的正整数? 显然是数位dp啦=w=. 显然与上一位有关,我们$dfs$的时候就要记录$pre$.因为这是 ...
- (十)SpringBoot的文件上传
一:添加commons-fileupload依赖 打开pom文件添加 <dependency> <groupId>commons-fileupload</groupId& ...
- Java 反射机制详解(下)
续:Java 反射机制详解(上) 三.怎么使用反射 想要使用反射机制,就必须要先获取到该类的字节码文件对象(.class),通过字节码文件对象,就能够通过该类中的方法获取到我们想要的所有信息(方法,属 ...
- 「软件」仿站小工具v9.0
仿站小工具是通过网址下载静态网页的工具.从输入的网址下载html代码,提取出JS.Css.Image.Picture.Flash等静态文件网址,再从下载完好的Css代码中提取出Image静态文件网址, ...
- spring @InitBinder
/** * 将字符串日期转化为Date类型 * @param binder */ @InitBinder protected void initBinder(WebDataBinder binder) ...
- 跟我一起玩Win32开发(19):浏览和打开文件
在应用程序中,我们很经常要实现的功能,是Open文件或保存文件对话框,让用户来选择一个或N个文件.本文我将介绍两种思路,第一种方法较为复杂,第二种方法较为简单. 方法一:老规矩 这是一种传统方法,使用 ...
- 跟我一起玩Win32开发(17):启动和结束进程
这里我再次说明一下,我不知道为什么,现在的人那么喜欢走极端,估计是价值观都“升级”了的缘故吧. 我撰写这一系列Win32相关的文章,并不是叫大家一定要用Win32去开发项目,仅仅是给大家了解一下,Wi ...
- html 文本溢出显示省略号 .....
- Spark MLlib编程API入门系列之特征选择之卡方特征选择(ChiSqSelector)
不多说,直接上干货! 特征选择里,常见的有:VectorSlicer(向量选择) RFormula(R模型公式) ChiSqSelector(卡方特征选择). ChiSqSelector用于使用卡方检 ...