django模型系统二
常用查询及表关系的实现
1.常用查询
每一个django模型类,都有一个默认的管理器 objects
QuerySet表示数据库中对象的列表,它可以有0到多个过滤器。过滤器通过给定参数,缩小查询范围。
QuerySet等同于select语句,过滤器是一个限制子句,比如where,limit。
all() 获取所有
Student.objects.all() #返回的是queryset
获取第一条
Student.objects.first() #返回的是对象
获取最后一条
Student.objects.last() #返回的是对象
get(**kwargs)根据给定的条件获取一个对象,如果符合多个或没有就会报错
filter(**kwargs)过滤,根据参数提供的条件,获取一个过滤器后的QuerySet,多个条件等同于select子句使用and连接,关键字的参数的形参必须是模型中的字段名。
Student.objects.filter(name='张三').filter(sex=0)
exclude(**kwargs)用法和filter一样,作用相反,它是排除
order(*fileds),根据给定的字段排序
res.order_by('-age','name') #默认asc, -age代表反向排序
切片:使用列表的切片语法操作query,除了不能用负索引,其他都可以,他等价于LIMIT与OFFSET子句
values(*fileds)返回queryset,这个queryset返回的是一个字典列表,参数fields指定了select中我们想要限制查询的字段。返回的字典列表中,只会包含我们指定的字段。如果不指定,包含所有字段。
res=Student.objects.values('name')
only(*fileds)返回一个queryset,跟values一样,区别在于这个queryset是对象列表,only一定包含主键。
res=Student.objects.only('name')
defer(*fields)用法与only相反
res=Student.objects.defer('sex')
多条件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)
查询条件:
exact 精确匹配
res=Student.objects.filter(name__exact='张三')
iexact 忽略大小写
res=Student.objects.filter(name__iexact='张三')
contains
res=Student.objects.filter(name__contains='张三')
icontains
in
res=Student.objects.filter(name__in=[18,20])
gt (great than)
gte (great than equal)
res=Student.objects.filter(name__gte=18)
lt (less than)
res=Student.objects.filter(name__lt=18)
lte
startswith 以什么开始
res=Student.objects.filter(name__startswith='张')
istartswith
endwith 以什么结尾
iendwith
range 范围区间
res=Student.objects.filter(name__range=(18,20))
isnull
res=Student.objects.filter(name__isnull=True)
语法都是field__condition 是两个下划线
count返回queryset的长度
聚合函数
Avg
#计算同学们的年龄平均值
res=Student.objects.aggregate(age_avg=Avg('age'))
Max最大值
#找到年龄最大的学生
res=Student.objects.aggregate(age_max=Max('age'))
Min最小值
sum求和
分组,聚合,分组需要结合values,annotate和聚合方法看下面的案例
#查询男生女生分别有多少人
from django.db.models import Count res=Student.objects.values('sex').annotate(Count('sex'))
2.常用模型字段类型
参考官方文档
https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-types
3.表关系实现
django中,模型通过特殊的字段进行关系连接。
一对一
一对多
多对多
django模型系统二的更多相关文章
- python的Web框架,Django模型系统二,模型属性,及数据库进阶查询
原始数据接上篇文章来操作.可能需要查看后才能懂.点击这里查看 1.常用的模型字段类型 官方文档:https://docs.djangoproject.com/en/2.1/ref/models/fie ...
- django模型系统(二)
django模型系统(二) 常用查询 每一个django模型类,都有一个默认的管理器,objects QuerySet表示数据库中对象的列表.他可以有0到国歌过滤器.过滤器通过给定参数,缩小查询范围( ...
- 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 = ...
随机推荐
- tf.cast(ndarray,dtype)
转化为指定的类型,一般是将bool类型转化为其他的数据类型,例如:tf.float32
- 高并发MYSQL如何优化处理?
1)代码中sql语句优化 2)数据库字段优化,索引优化 3)加缓存,redis/memcache等 4)主从,读写分离 5)分区表 6)垂直拆分,解耦模块 7)水平切分
- bzoj 3408 热浪 最短路
一道最短路的模板题,就当练习一下SPFA和dijkstra了 SPFA #include<bits/stdc++.h> using namespace std; struct edge{ ...
- Xshell查看日志的基础使用
2018\11\26 下载安装不多说,官网免费版即可,附上链接:https://www.netsarang.com/products/xsh_overview.html 打开后新建连接,输入主机ip即 ...
- vue使用,问题
参考链接:https://cn.vuejs.org/v2/guide/index.html *)[Vue warn]: Error in v-on handler: "TypeError: ...
- python -迭代器与生成器 以及 iterable(可迭代对象)、yield语句
我刚开始学习编程没多久,对于很多知识还完全不知道,而有些知道的也是一知半解,我想把学习到的知识记录下来,一是弥补记忆力差的毛病,二也是为了待以后知识能进一步理解透彻时再回来做一个补充. 参考链接: 完 ...
- Hdu 4930 斗地主
模拟题,只是想纪念下,WA到死了…… 看到好多代码都好长,其实想说不用这么暴力. #include <iostream> #include <cstdio> #include ...
- Unity C# 设计模式(五)建造者模式
定义: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 组成部分: 1.Builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造.这个接口规定要实现复杂对象的哪 ...
- 【转】 HTML解析:基于XPath的C#类库HtmlAgiliytyPack
[转] HTML解析:基于XPath的C#类库HtmlAgiliytyPack 最近处于毕业设计开始阶段,前期工作需要去国外的一些专业数据库网站比对一些所需TF家族信息,为了快捷方便,想到用程序去帮助 ...
- 使用LruCache和DiskLruCache来下载图片
LruCache是一个非常好用的图片缓存工具: 主要做法是:滑动图片时将图片的bitmap缓存在LruCache<String, Bitmap>中,退出程序后将图片缓存进文件中.採用Dis ...