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 = ...
随机推荐
-
win7下vs2008编译出现C1859错误的处理办法
昨天,电脑上安装的vs2008 sp1版本编译工程时候出了这样的错了:fatal error C1859: 'Debug\**.pch'.清理并重新编译会临时解决问题,但问题仍然会频发.后面上网找资料 ...
-
Longest Common Prefix 解答
Question Write a function to find the longest common prefix string amongst an array of strings. Solu ...
-
asp.net mvc 下载文件 txt doc xsl 等等
不废话,直接上代码,就是这么简单 public FileStreamResult StreamFileFromDisk() { // string path = AppDomain.Current ...
-
浅谈linux读写同步机制RCU
RCU是linux系统的一种读写同步机制,说到底他也是一种内核同步的手段,本问就RCU概率和实现机制,给出笔者的理解. [RCU概率] 我们先看下内核文档中对RCU的定义: RCU is a sync ...
-
MySQL5.7开启独立表空间参数innodb_file_per_table【原创】
今天在线上某个系统发现MySQL数据库使用的是共享表空间,想修改为独立表空间,操作如下: #因为是主从结构,在从库修改测试,先关闭binlog SET SQL_LOG_BIN=; show varia ...
-
line-height与height
line-height是行高,height就是高,通常height是对于某个框架或者图片来弄的,line-height用于文字 如果要实际效果你可以写一段文字,分好几行,然后对它做line-heigh ...
-
AI - 框架(Frameworks)
1 - Scikit-Learn Sklearn(scikit-learn: machine learning in Python):https://scikit-learn.org/ 文档丰富而又详 ...
-
对于nginx配置文件中的fastcgi_param的配置错误
在centos中搭建LNMP的时候,遇到了一个问题 在浏览器中访问.php文件的时候,nginx不能正常解析,页面返回404,后来百度了一下,发现了问题 在nginx的配置文件nginx.conf中的 ...
-
SPI、IIC、IIS、UART、CAN、SDIO、GPIO、USB总线协议
SPI.IIC.IIS.UART.CAN.SDIO.GPIO总线协议 SPI(Serial Peripheral Interface:串行外设接口)SPI总线由三条信号线组成:串行时钟(SCLK).串 ...
-
Java基础95 过滤器 Filter
1.filter 过滤器的概述 filter过滤器:是面向切面编程的一种实现策略,在不影响原来的程序流程的前提下,将一些业务逻辑切入流程中,在请求达到目标之前进行处理,一般用于编码过滤.权限过滤... ...