概述
查询集表示从数据库获取的对象的集合
查询集可以有多个过滤器
过滤器就是一个函数,基于所给的参数限制查询集结果
从SQL角度来说,查询集和select语句等价,过滤器就像where条件
查询集
在管理器上调用过滤器方法返回查询集
查询集经过过滤器筛选后返回新的查询集,所以可以写成链式调用
惰性执行
创建查询集不会带来任何数据库的访问,直到调用数据库时,才会访问数据
直接访问数据的情况:
迭代
序列化
与if合用
返回查询集的方法称为过滤器
all():返回查询集中的所有数据
filter():保留符合条件的数据
filter(键=值)
filter(键=值,键=值)
filter(键=值).filter(键=值) 且的关系
exclude():过滤掉符合条件的
order_by():排序
values():一条数据就是一个字典,返回一个列表
get()
返回一个满足条件的对象
注意:
如果没有找到符合条件的对象,会引发模型类.DoesNotExist异常
如果找到多个对象,会引发模型类MultipleObjectsReturned异常
count():返回查询集中对象的个数
first():返回查询集中第一个对象
last():返回查询集中最后一个对象
exits():判断查询集中是否有数据,如果有数据返回 True,否则返回 False.
限制查询集
查询集返回列表,可以使用下标的方法进行限制,等同于sql中的limit语句
注意:下标不能是负数
示例:studentsList = Students.stuObj2.all()[0:5]
查询集的缓存
概述:
每个查询集都包含一个缓存,来最小化对数据库的访问
在新建的查询集中,缓存首次为空,第一次对查询集求值,会发生数据缓存,Django会将查询出来的数据做一个缓存,并返回查询结果。
以后的查询直接使用查询集的缓存
字段查询
概述
实现了sql中的where语句,作为方法filter(),exclude(),get()的参数
语法:属性名称__比较运算符=值
外键:属性名称_id
转义:类似sql中的like语句
like有关情况看我哥他%是为了匹配点位,匹配数据中的%使用(where like "\%")
filter(sname__contains="%")
比较运算符
exact:判断,大小写敏感
filter(isDelete=False)
contains:是否包含,大小写敏感
studentsList = Students.stuObj2.filter(sname__contains="孙")
startswith,endswith:以value开头或结尾,大小写敏感
以上四个在前面加上i,就表示不区分大小写iexact,icontains,istartswith,iendswith
isnull,isnotnull
是否为空
filter(sname__isnull=False)
in:是否包含在范围内
gt大于,gte大于等于,lt小于,lte小于等于
year,month,day,week_day,hour,minute,second
studentsList = Students.stuObj2.filter(lastTime__year=2017)
跨关联查询
处理join查询
语法:
模型类名__属性名__比较运算符
# 描述中带有‘薛延美’这三个字的数据是属于哪个班级的
grade = Grades.objects.filter(students__scontend__contains='薛延美')
print(grade)
查询快捷pk代表的主键
聚合函数
使用aggregate函数返回聚合函数的值
Avg
Count
Max
maxAge = Student.stuObj2.aggregate(Max('sage'))
maxAge为最大的sage。
Min
Sum
F对象
可以使用模型的A属性与B属性进行比较
from django.db.models import F,Q
def grades1(request):
g = Grades.objects.filter(ggirlnum__gt=F('gboynum'))
print(g)
# [<Grades: python02>,<Grades: python03>]
return HttpResponse("OOOOOOOo")
支持F对象的算术运算
g = Grades.objects.filter(ggirlnum__gt=F('gboynum')+20)
Q对象
概述:过滤器的方法的关键字参数,条件为And模式
需求:进行or查询
解决:使用Q对象
def students4(request):
studentsList = Students.stuObj2.filter(Q(pk__lte=3) | Q(sage__gt=50))
return render(request, 'myApp/students.html', {"students": studentsList})
只有一个Q对象的时候,就是用于正常匹配条件
studentsList = Students.stuObj2.filter(~Q(pk__lte=3))
~Q是取反

概述查询集表示从数据库获取的对象的集合查询集可以有多个过滤器过滤器就是一个函数,基于所给的参数限制查询集结果从SQL角度来说,查询集和select语句等价,过滤器就像where条件查询集在管理器上调用过滤器方法返回查询集查询集经过过滤器筛选后返回新的查询集,所以可以写成链式调用惰性执行创建查询集不会带来任何数据库的访问,直到调用数据库时,才会访问数据直接访问数据的情况:迭代序列化与if合用返回查询集的方法称为过滤器all():返回查询集中的所有数据filter():保留符合条件的数据filter(键=值)filter(键=值,键=值)filter(键=值).filter(键=值)   且的关系exclude():过滤掉符合条件的order_by():排序values():一条数据就是一个字典,返回一个列表get()返回一个满足条件的对象注意:如果没有找到符合条件的对象,会引发模型类.DoesNotExist异常如果找到多个对象,会引发模型类MultipleObjectsReturned异常count():返回查询集中对象的个数first():返回查询集中第一个对象last():返回查询集中最后一个对象exits():判断查询集中是否有数据,如果有数据返回 True,否则返回 False.限制查询集查询集返回列表,可以使用下标的方法进行限制,等同于sql中的limit语句注意:下标不能是负数示例:studentsList = Students.stuObj2.all()[0:5]查询集的缓存概述:每个查询集都包含一个缓存,来最小化对数据库的访问在新建的查询集中,缓存首次为空,第一次对查询集求值,会发生数据缓存,Django会将查询出来的数据做一个缓存,并返回查询结果。以后的查询直接使用查询集的缓存字段查询概述实现了sql中的where语句,作为方法filter(),exclude(),get()的参数语法:属性名称__比较运算符=值外键:属性名称_id转义:类似sql中的like语句 like有关情况看我哥他%是为了匹配点位,匹配数据中的%使用(where like "\%") filter(sname__contains="%")比较运算符exact:判断,大小写敏感filter(isDelete=False)contains:是否包含,大小写敏感studentsList = Students.stuObj2.filter(sname__contains="孙")startswith,endswith:以value开头或结尾,大小写敏感以上四个在前面加上i,就表示不区分大小写iexact,icontains,istartswith,iendswithisnull,isnotnull是否为空filter(sname__isnull=False)in:是否包含在范围内gt大于,gte大于等于,lt小于,lte小于等于year,month,day,week_day,hour,minute,secondstudentsList = Students.stuObj2.filter(lastTime__year=2017)跨关联查询处理join查询语法:模型类名__属性名__比较运算符# 描述中带有‘薛延美’这三个字的数据是属于哪个班级的grade = Grades.objects.filter(students__scontend__contains='薛延美')print(grade)查询快捷pk代表的主键聚合函数使用aggregate函数返回聚合函数的值AvgCountMaxmaxAge = Student.stuObj2.aggregate(Max('sage'))maxAge为最大的sage。MinSumF对象可以使用模型的A属性与B属性进行比较from django.db.models import F,Qdef grades1(request):g = Grades.objects.filter(ggirlnum__gt=F('gboynum'))print(g)# [<Grades: python02>,<Grades: python03>]return HttpResponse("OOOOOOOo")支持F对象的算术运算g = Grades.objects.filter(ggirlnum__gt=F('gboynum')+20)Q对象概述:过滤器的方法的关键字参数,条件为And模式需求:进行or查询解决:使用Q对象def students4(request):studentsList = Students.stuObj2.filter(Q(pk__lte=3) | Q(sage__gt=50))return render(request, 'myApp/students.html', {"students": studentsList})只有一个Q对象的时候,就是用于正常匹配条件studentsList = Students.stuObj2.filter(~Q(pk__lte=3))~Q是取反

django模型查询的更多相关文章

  1. django模型查询操作

    一旦创建好了数据模型,Django就会自动为我们提供一个数据库抽象API,允许创建.检索.更新和删除对象操作 下面的示例都是通过下面参考模型来对模型字段进行操作说明: from django.db i ...

  2. 八.django模型系统(二)之常用查询及表关系的实现

    Ⅰ.常用查询  1.几个概念 每一个django模型类,都有一个默认的管理器,objects,查询就是依赖于objects管理器进行的(在创建时就被添加了). QuerySet表示数据库中对象的列表( ...

  3. {django模型层(二)多表操作}一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询、分组查询、F查询和Q查询

    Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 xxx 七 ...

  4. Django 08 Django模型基础3(关系表的数据操作、表关联对象的访问、多表查询、聚合、分组、F、Q查询)

    Django 08 Django模型基础3(关系表的数据操作.表关联对象的访问.多表查询.聚合.分组.F.Q查询) 一.关系表的数据操作 #为了能方便学习,我们进入项目的idle中去执行我们的操作,通 ...

  5. Django 07 Django模型基础2 (常用查询和多表关联)

    Django 07 Django模型基础2 (常用查询和多表关联) 一.常用查询 #查找数据 def search_user(request): #获取 rs = User.objects.first ...

  6. django模型

    用django时,只要用到数据库就得用到模型. 一.数据库的MTV开发模式 从MVC到MTV 所谓软件架构的MVC模式将数据的存取逻辑(Module),表现逻辑(View)和业务逻辑(Controll ...

  7. 【Python】django模型models的外键关联使用

    Python 2.7.10,django 1.8.6 外键关联:http://www.bubuko.com/infodetail-618303.html 字段属性:http://www.cnblogs ...

  8. Django模型-数据库操作

    前言 前边记录的URLconf和Django模板全都是介绍页面展示的东西,也就是表现层的内容.由于Python先天具备简单而强大的数据库查询执行方法,Django 非常适合开发数据库驱动网站. 这篇开 ...

  9. Django 模型中自定义Manager和模型方法

    1.自定义管理器(Manager) 在语句Book.objects.all()中,objects是一个特殊的属性,通过它来查询数据库,它就是模型的一个Manager. 每个Django模型至少有一个m ...

随机推荐

  1. Tensorflow 相关概念

    一.概述 人工智能:artificial intelligence 权重: weights 偏差:biases 图中包含输入( input).塑形( reshape). Relu 层( Relulay ...

  2. TextSharp详情

    TextSharp是一个生成Pdf文件的开源项目,最近在项目中有使用到这个项目,对使用中的经验作一个小结. ITextSharp中相关的概念: 一.Document 这个对象有三个构造函数: 隐藏行号 ...

  3. kafka中处理超大消息的一些处理

       Kafka设计的初衷是迅速处理短小的消息,一般10K大小的消息吞吐性能最好(可参见LinkedIn的kafka性能测试).但有时候,我们需要处理更大的消息,比如XML文档或JSON内容,一个消息 ...

  4. python学习笔记——git的安装及使用

    1 git的基本介绍 git 是目前世界上最先进的分布式版本哦内阁制系统 详细信息可参考廖雪峰的官方网站中的Git教程 比git功能更加强大的有TortoiseGit和Tortoise SVN,具体安 ...

  5. 使用Kotlin开发Android应用

    1.Kotlin介绍 [Kotlin](https://kotlinlang.org/) Kotlin是一门基于JVM的编程语言,它正成长为Android开发中用于替代Java语言的继承者.Java是 ...

  6. nodejs的Express框架源码分析、工作流程分析

    nodejs的Express框架源码分析.工作流程分析 1.Express的编写流程 2.Express关键api的使用及其作用分析 app.use(middleware); connect pack ...

  7. Markdown 使用教程

    前言 以前经常在 github 中看到 .md 格式的文件,一直没有注意,也不明白为什么文本文档的后缀不是 .txt ,后来无意中看到了 Markdown,看到了用这个东西写得一些web界面等特别的规 ...

  8. 第3章 Python基础-文件操作&函数 文件操作 练习题

    一.利用b模式,编写一个cp工具,要求如下: 1. 既可以拷贝文本又可以拷贝视频,图片等文件 2. 用户一旦参数错误,打印命令的正确使用方法,如usage: cp source_file target ...

  9. Python 文件 fileno() 方法

    描述 Python 文件 fileno() 方法返回一个整型的文件描述符(file descriptor FD 整型),可用于底层操作系统的 I/O 操作. 语法 fileno() 方法语法如下: f ...

  10. (面试)Statement和PrepareStatement有什么区别

    (1)Statement用于执行静态sql语句,在执行时,必须指定一个事先准备好的sql语句.PrepareStatement是预编译的sql语句对象,sql语句被预编译并保存在对象中.被封装的sql ...