概述
查询集表示从数据库获取的对象的集合
查询集可以有多个过滤器
过滤器就是一个函数,基于所给的参数限制查询集结果
从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. Spring使用内存数据库二

    在上篇<Spring 使用内存数据库>中我们使用Hibernate作为ORM的框架,直接调用Hibernate的API进行相关的持久化操作,但在实际项目中,可能会由于公司规定等原因要求统一 ...

  2. Ubuntu菜鸟入门(十三)—— 切换软件源

    默认中国服务器,我们把它切换成aliyun的. 在设置--软件和更新里--下载自--其他站点--中国--http://mirrors.aliyun.com/ubuntu 先把所有软件源和软件更新到最新 ...

  3. C# 图片识别(支持21种语言)

    图片识别的技术到几天已经很成熟了,只是相关的资料很少,为了方便在此汇总一下(C#实现),方便需要的朋友查阅,也给自己做个记号. 图片识别的用途:很多人用它去破解网站的验证码,用于达到自动刷票或者是批量 ...

  4. Hadoop学习:Map/Reduce初探与小Demo实现

    原文地址:https://blog.csdn.net/liyong199012/article/details/25423221 一.    概念知识介绍 Hadoop MapReduce是一个用于处 ...

  5. C语言中 不定义结构体变量求成员大小

    所谓的求成员大小, 是求成员在该结构体中 用 sizeof(结构体名.结构体成员名) 求来的. 很多时候我们需要知道一个结构体成员中的某个成员的大小, 但是我们又不需要定义该结构体类型的变量(定义的话 ...

  6. MySQL-InnoDB Compact 行记录格式

    InnoDB存储引擎提供了compact(5.1后的默认格式)和redundant两个格式来存放行记录数据.redundant格式是为了兼容之前的版本而保留. mysql> show table ...

  7. Android 热修复 Tinker接入及源码浅析

    一.概述 放了一个大长假,happy,先祝大家2017年笑口常开. 假期中一行代码没写,但是想着马上要上班了,赶紧写篇博客回顾下技能,于是便有了本文. 热修复这项技术,基本上已经成为项目比较重要的模块 ...

  8. 恢复Ext3下被删除的文件

    下面是这个教程将教你如何在Ext3的文件系统中恢复被rm掉的文件. 假设我们有一个文件名叫 ‘test.txt’  $ls -il test.txt 15 -rw-rw-r– 2 root root ...

  9. STM8串口初始化寄存器配置

    //库函数配置 UART1_DeInit(); UART1_Init((u32)1000000, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, \ UART1_PARI ...

  10. Android下的联网下载的操作

    一:从网络下载图片 MainActivity: NetService 1.由路径获取Url 2.使用url打开HttpURLConnection连接 3.根据路径查找本地sd卡是否有缓存文件,如果文件 ...