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分别存放了用户,用户 ...
随机推荐
- 鸟哥私房菜基础篇:Linux是什么习题
猫宁!!! 参考链接:http://cn.linux.vbird.org/linux_basic/0110whatislinux.php#ex 鸟哥是为中国信息技术发展做出巨大贡献的人. 1-你在你的 ...
- python 导入.py
转自: https://blog.csdn.net/winycg/article/details/78512300 在同一个文件夹下调用函数:A.py文件: def add(x,y): print(' ...
- @ConfigurationProperties和@EnableConfigurationProperties配合使用
https://blog.csdn.net/u010502101/article/details/78758330 @ConfigurationProperties注解主要用来把properties配 ...
- Linux源码编译处理
1. 解决依赖问题 查询需要的依赖软件,提前安装好若使用命令行安装,一般使用默认路径:使用源码安装,则自定义安装路径,后续可能需要进行路径配置PS:可能需要在Makefile等配置文件中添加相关库文件 ...
- BFS Codeforces Round #297 (Div. 2) D. Arthur and Walls
题目传送门 /* 题意:问最少替换'*'为'.',使得'.'连通的都是矩形 BFS:搜索想法很奇妙,先把'.'的入队,然后对于每个'.'八个方向寻找 在2*2的方格里,若只有一个是'*',那么它一定要 ...
- Closures闭包
//: Playground - noun: a place where people can play import UIKit /* 闭包 Swift ====> Closures Ruby ...
- hdu 1979 DFS + 字典树剪枝
http://acm.hdu.edu.cn/showproblem.php?pid=1979 Fill the blanks Time Limit: 3000/1000 MS (Java/Others ...
- TRUNCATE DELETE DROP 区别
TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行.但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源 ...
- mac及windows下安装ss实现***
官网下载shadowsock(mac/windows都是下面地址,页面会根据当前系统自动判断所下载的包) https://sourceforge.net/projects/shadowsocksgui ...
- sybase sql anywhere 5.0 安装后sybase central中无法打开视图等的解决办法
无法打开的原因初步分析要用英文版的xp,后来在如下处发现问题,是sql anywhere的版本太旧了, 可能没有使用Unicode编码,设置一下如下选项可以解决问题.