Django中模型(五)
Django中模型(五)
六、模型查询
1、概述
查询集,表示从数据库获取的对象集合。
过滤器就是一个函数,基于所给的参数限制查询集结果。查询集可以有多个过滤器。
从sql角度来说,查询集合等价于select语句,过滤器等价于where条件。
2、查询集
A、概述
在管理器上调用过滤器方法返回查询集。查询集经过过滤器方法筛选后返回新的查询集,所以可以写成链式调用。
B、惰式执行
创建查询集不会带来任何数据的访问,直到调用数据时,才会访问数据库
C、直接访问数据库的情况
迭代、序列化、与if合用
D、过滤器
过滤器,返回查询集的方法称为过滤器。
all():返回所有数据
filter():
返回符合条件的数据。
filter(‘键’=‘值’):键是数据表中的字段名,值是条件。返回满足条件的数据
filter(‘键’=‘值’,‘键’=‘值’):返回同时满足两个条件的数据
filter(‘键’=‘值’). filter(‘键’=‘值’):同上
exclude():过滤掉符合条件的数据
order_by(‘字段名’):以某字段排序
values():一条数据就是一个对象(字典类),返回一个列表
E、返回单个数据
get():返回一个满足条件的对象。注意:如果没有找到符合条件的对象,会引发“模型类.DoesNotExist”异常;如果找到多个对象,会引发“模型类.MultipleObjectsReturned”异常。
count():返回当前查询集中的对象个数。
first():返回查询集中的第一个对象
last():返回查询集中的最后一个对象
exists():判断查询集中是否有数据,如果有数据则返回True
F、限制查询集
查询集返回列表,可以使用下标的方法进行限制,等同于sql中的limit语句。
eg:
studentsList=students.objects.all()[0:5]
注意:下标不能为负数
G、查询集的缓存
每个查询集都包含一个缓存,来最小化的对数据库访问;在新建的查询集中,缓存首次为空,第一次对数据集查询求值,会发生数据缓存,Django会将查询出来的数据做一个缓存,并返回查询结构,以后的查询直接使用查询集的缓存。
F、字段查询
概述:
实现了sql中的where语句,作为方法filter()、exclude()、get()的参数。
语法:
属性名称__比较运算符=值
外键:
属性名_id
转义:
比较运算符:
exact:判断,区分大小写
contains:是否包含,区分大小写
eg:views.py
def studentsearch(request):
studentList=Students.objects.filter(sname_contains='孙')#查询Student数据表中sname字段值中包含‘孙’的值
return rander(request,'news.html',{"students":studentList})
startswith(value),endswith(value):以value开头或结尾,区分大小写
eg:views.py
def studentsearch(request):
studentList=Students.objects.filter(sname_startswith='孙') #查询Student数据表中sname字段值中以‘孙’开头的值
return rander(request,'news.html',{"students":studentList})
注意:以上四个在前面加上i,表示不区分大小写。iexact,icontains,istartswith,iendswith。
isnull、isnotnull:
判断是否为空。和以上几个使用方法一致:属性名__isnull=False)
in:
是否在内。
gt:大于
gte:大于等于
lt:小于
lte:小于等于
year:年
month:月
day:天
week_day
minute:分
second:秒
G、查询快捷
PK:代表主键
H、聚合函数
聚合函数需写在aggregate()的括号里。还需要引入相应的模块:
from django.db.models import Avg Count, Min, Max, Sum
Avg():取平均值
Count():返回数据的个数
Max():返回该字段的最大值
Min():返回该字段的最小值
Sun():返回该字段的和
eg:abs = table_name.objects.filter(date=n_lastday, brand=depart).aggregate(Max('rank'))
打印结果为 {'rank__max': 42}
I:跨关联查询
处理join查询。语法:模型类名__属性名__比较运算符。
eg:返回描述中带有“孙红雷”这三个字的的数据属于哪个班级
grade=Grades.objects.filter(students__scontend__contains='孙红雷')
Grades:年级数据表,该表中有班级字段
students:学生数据表,该表中有描述字段“scontend”
contains:比较运算符,包含
J、F对象
使用模型A的属性与模型B属性进行比较,实际上是一条数据的两个值进行比较。
F对象支持算数符运算。
eg:views.py 取出女生人数比男生人数多的数据
from django.db.models import F
def grades(request):
#取出女生人数比男生人数多的数据g=Grades.objects.filter(ggirlnum__gt=F('gboynum'))
#取出女生人数大于男生人数加20后的数据
gb=Grades.objects.filter(ggirlnum__gt=F('gboynum'+20))
print(g)
print(g)
Grades:年级数据表
ggirlnum:字段,女生人数
gt:比较运算符,大于
gboynum:字段,男生人数
K、Q对象
进行或查询。
eg:views.py
from django.db.models import Q
def grades(request):
#取出主键值小于3或sage大于18的所有值 s=Students.objects.filter(Q(PK__lte=3)|Q(sage__gt=18))#
print(s)
七、外键的添加
models.py
class A(models.Model):
title = models.CharField(max_length=20) class B(models.Model):
bname = models.CharField(max_length=20)
fk = models.ForeignKey(A, on_delete=models.DO_NOTHING)
views.py
from .models import * # 方法一
B.objects.creat(bname='test', fk=A.object.get(id=1))
# 方法二
B.objects.creat(bname='test', fk_id=1)
Django中模型(五)的更多相关文章
- Django中模型(四)
Django中模型(四) 五.创建对象 1.目的 向数据库中添加数据.当创建对象时,Django不会对数据库进行读写操作,当调用save()方法时,才与数据库交互,将对象保存到数据库中 2.注意 __ ...
- django中模型详解-字段类型与约束条件
这片博文来详细说明django模型的使用,涉及到django模型的创建,字段介绍,以及django模型的crud操作,以及一对一等操作. 在使用模型之前,我们首先设置数据库选项,django的默认数据 ...
- Django中模型(三)
Django中模型(三) 四.模型成员 1.类属性 objects:是Manager类的一个对象,作用是与数据库进行交互. 定义模型类时,没有定义管理器,则默认创建名为objects的管理器. 2.自 ...
- Django中模型(二)
Django中模型(二) 三.定义模型 1.模型.属性.表.字段间的关系: 一个模型类在数据库中对应一张表:在模型类中定义的属性,对应该模型对照表中的字段. 2.定义属性 A.概述 ·django根据 ...
- Django中模型(一)
Django中模型(一) 一. 基本开发流程 1. 配置数据库 2. 定义模型类:一个模型类都在数据库中对应一张数据表 3. 生成迁移文件 4. ...
- Django中模型层中ORM的多表操作
ORM的多表创建(一对一.一对多,多对多): 1模型创建 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等 ...
- Django中模型层中ORM的单表操作
ORM概念: MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员 ...
- django中模型
一.django需要使用数据库,则需要安装对应的驱动,比如mysql,则需要安装mysqlclient驱动: pip install mysqlclient 二.在settings.py文件中配置数据 ...
- python---Django中模型类中Meta元对象了解
Django中模型类中Meta元对象了解 1.使用python manage.py shell 进入编辑命令行模式,可以直接进入项目(为我们配置好了环境) python manage.py shell ...
随机推荐
- c#项目代码风格要求
代码风格没有正确与否,重要的是整齐划一,这是我拟的一份<.Net 项目代码风格要求>,供大家参考. 1. C# 代码风格要求 1.1注释 类型.属性.事件.方法.方法参数,根据需要添加注释 ...
- Java学习--Java 中的包装类
Java 中的包装类 相信各位小伙伴们对基本数据类型都非常熟悉,例如 int.float.double.boolean.char 等.基本数据类型是不具备对象的特性的,比如基本类型不能调用方法.功能简 ...
- csharp: SQL Server 2005 Database Backup and Restore using C#
1.第一种方式: using SQLDMO;//Microsoft SQLDMO Object Library 8.0 /// <summary> /// 数据库的备份 /// 涂聚文注: ...
- BZOJ1968 [Ahoi2005] 约数研究
Description Input 只有一行一个整数 N(0 < N < 1000000). Output 只有一行输出,为整数M,即f(1)到f(N)的累加和. Sample Input ...
- css专业术语笔记
1. 属性 如height.color等,称作css的属性. 2. 值 在css中,如:10px, 50%, #ccc等这些都称作css的值.比较常见的类型值有:整数值,数值,百分比值,长度值,颜色值 ...
- 【Android】15.0 UI开发(六)——列表控件RecyclerView的网格布局排列实现
1.0 列表控件RecyclerView的网格布局排列实现,关键词GridLayoutManager. LinearLayoutManager 实现顺序布局 GridLayoutManager 实现网 ...
- Javascript获取For循环所用时间
第一种: let tOne = new Date().getTime(); let n = new Date(); let hour = n.getHours() < 10 ? "0& ...
- CSS选择器:#id和.class中间有空格和无空格的区别
相信大家都知道 .class1 .class2 和 .class1.class2 是两种不同的选择规则,但具体怎样不同呢? 首先中间有空格的情况:是选择到.class1类下的.class2类子节点,即 ...
- 解析json结构绘制canvas
在工作中偶尔会遇到绘制转发卡/邀请卡的业务,且这个转发卡/邀请卡的风格会有很多,要求最后生成图片.这时候如果使用一张图片绘制一个canvas,这个工作量会相当大.分析一下转发邀请的内容,会发现所有的里 ...
- CentOS网卡显示为__tmpxxxxxxxx
一台服务器做了2组端口绑定(bonding),其中一组bond总是不成功,发现少了eth0/eth5 两个网卡,后来通过ifconfig -a 发现多了两个__tmpxxx的网卡 ifconfig - ...