django模型系统(二)
django模型系统(二)
常用查询
- 每一个django模型类,都有一个默认的管理器,objects
QuerySet表示数据库中对象的列表。他可以有0到国歌过滤器。过滤器通过给定参数,缩小查询范围(filter)。
QuerySet等同与select语句,过滤器等同于一个限制字句,比如where、limit
- 使用
.query可查看对应的SQL语句
- all()获取所有
name.objects.all()queryset - 获取第一条
name.objects.first()返回的是对象 - 获取最后一条
name.objects.last()返回的是对象 - get(**kwargs)根据给定的条件获取一个对象,如果符合多个或者没有就会报错
- filter(**kwargs)过滤,根据参数提供的条件,获取一个过滤器后的QuerySet,多个条件等同于
select子句使用and连接,关键字参数的形参必须是模型中的字段名。
Student.objects.filter(name='xinlan').filter(age=18)
- 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一定包含主键。
- defer(*fields) 用法与only相反
- 多条件OR连接,需要实现OR条件,我们要使用Q对象。
- 注意:要导入模块
from django.db.models import 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)
查询条件
- exact 精确匹配
例如:Student.objects.filter(name__exact='XXX')#_exact可以不写 - iexact 忽略大小写
- contains 包含,对应sql的%
- icontains 包含(忽略大小写)
- in 等价sql的in
- gt 大于:grate than
- gte 大于等于:grate than equ
- lt 小于:less than
- lte 小于等于:less than equ
- startswith 以什么什么开始
- istartswith 忽略大小写
- endwith 以什么什么结束
- iendwith 忽略大小写
- range **__range=(),范围区间,等价于sql:between...and...
- isnull 是否为空
语法都是field__conditon= 是 两个下划线
count() ,统计。返回queryset的长度
聚合函数
语法:
list_name.objects.aggregate(anyname=Avg('age'))
#必须要用aggregate方法,anyname自己命名
#返回的市dit字典,不是query语句,无法查询sql语句
- Avg 平均值
# 计算同学们的年龄平均值
res = Student.objects.aggregate(age_avg=Avg('age'))
- Max 最大值
# 找到最大的年龄
res = Student.objects.aggregate(age_max=Max('age'))
- Min 最小值
- Sum求和
- 分组,聚合,分组需要结合values,annotate和聚合方法看下面的案例
# 查询男生女生分别有多少人
In [84]: from django.db.models import Count
#必须要导入模块
In [85]: res = Student.objects.values('sex').annotate(Count('sex'))
常用模型字段类型



官方文档说明:
https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-types
表关系实现
django 中,模型通过特殊的字段进行关系连接
- 一对一
- 一对多
- 多对多

例如:
anyname = models.OneToOneField('class_name',on_delete=models.CASCADE)#on_delete级联等外键关系
注意事项:
多对多关系,如果第三方表还有额外得到属性,需要手动创建第三方表并加入额外属性。并且要使用
through属性指定第三张表。
例如:class A(models.Model):
pass class B(models.Model):
anyname = models.ManyToManyField('A',through='C')
#B和A表多对多关联,手动生成第三方表,通过through指定第三方表C,在表C中可以添加额外属性 class C(models,Model):
pass
django模型系统(二)的更多相关文章
- django模型系统二
常用查询及表关系的实现 1.常用查询 每一个django模型类,都有一个默认的管理器 objects QuerySet表示数据库中对象的列表,它可以有0到多个过滤器.过滤器通过给定参数,缩小查询范围. ...
- python的Web框架,Django模型系统二,模型属性,及数据库进阶查询
原始数据接上篇文章来操作.可能需要查看后才能懂.点击这里查看 1.常用的模型字段类型 官方文档:https://docs.djangoproject.com/en/2.1/ref/models/fie ...
- django模型系统(一)
django模型系统(一) djangode ORM ORM:对像关系映射 用python概念去表达数据库 数据库配置(mysql) 安装pumysql 修改项目目录下的__init__.py imp ...
- {django模型层(二)多表操作}一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询、分组查询、F查询和Q查询
Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 xxx 七 ...
- day 70 Django基础五之django模型层(二)多表操作
Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 ORM ...
- day 56 Django基础五之django模型层(二)多表操作
Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 ORM ...
- 八.django模型系统(二)之常用查询及表关系的实现
Ⅰ.常用查询 1.几个概念 每一个django模型类,都有一个默认的管理器,objects,查询就是依赖于objects管理器进行的(在创建时就被添加了). QuerySet表示数据库中对象的列表( ...
- django模型——数据库(二)
模型--数据库(二) 实验简介 模型的一些基本操作,save方法用于把对象写入到数据库,objects是模型的管理器,可以使用它的delete.filter.all.order_by和update等函 ...
- Django模型系统——ORM校园管理系统代码
1.models.py from django.db import models # Create your models here. class Class(models.Model): id = ...
随机推荐
- 零门槛,包教会。让你在5分钟内使用以太坊ERC20智能合约发行属于自己的空气币
前言 目前区块链是互联网中最最火的风口,没有之一.我周围的很多朋友也加入了“炒币”行列,但很不幸,几乎都被“割韭菜”了.而经过我的几天研究,发现,如果自己要发行一种空气币,简直太简单了.只需要下面几个 ...
- 2018-2019-2 《网络对抗技术》 Exp1 PC平台逆向破解 20165215
2018-2019-2 <网络对抗技术> Exp1 PC平台逆向破解 20165215 目录 知识点描述 实验步骤 (一)直接修改程序机器指令,改变程序执行流程 (二)通过构造输入参数,造 ...
- 使用GoldenGate EVENTACTIONS执行数据的实时触发和定制化
Oracle GoldenGate不仅可以在线实时同步数据(包括增量和存量),也内置有一套事件触发流程,允许用户根据某张表某条记录的某个特殊字段值,触发相应的自定义执行流程,比如接收到某个银行账号的大 ...
- mysql和oracle分页查询
MYSQL分页查询 方式1: select * from table order by id limit m, n; 该语句的意思为,查询m+n条记录,去掉前m条,返回后n条记录.无疑该查询能够实现分 ...
- Spark大型电商项目实战-及其改良(1) 比对sparkSQL和纯RDD实现的结果
代码存在码云:https://coding.net/u/funcfans/p/sparkProject/git 代码主要学习https://blog.csdn.net/u012318074/artic ...
- 阿里云windows 2008 服务器处理挖矿程序 Miner
阿里云盾最近报发现wanacry蠕虫病毒和挖矿进程异常 仔细检查进程后,发现两个奇怪的进程 Eternalblue-2.2.0.exe,winlogins.exe 特别是伪装成 winlogins.e ...
- Pdf Convert Image 的解决方案
brew uninstall ghostscript brew install ghostscript gs -dNOPAUSE -sDEVICE=jpeg -r150 -sOutputFile=./ ...
- java枚举类型详解
枚举类型是JDK1.5的新特性.显然,enum很像特殊的class,实际上enum声明定义的类型就是一个类.而这些类都是类库中Enum类的子类(java.lang.Enum<E>).它 ...
- [Python数据挖掘]第8章、中医证型关联规则挖掘
一.背景和挖掘目标 二.分析方法与过程 1.数据获取 2.数据预处理 1.筛选有效问卷(根据表8-6的标准) 共发放1253份问卷,其中有效问卷数为930 2.属性规约 3.数据变换 ''' 聚类 ...
- GPIO8种方式小总结
在输出3时写1时上反向为0,下为1,1时MOS不接通,0接通 为1时上导通输出高电平1: 为0时下导通输出低电平0: VDD为逻辑电源正 VSS为逻辑地 若为输出状态则施密特触发器总为开 然后经过上拉 ...