概述
查询集表示从数据库获取的对象的集合
查询集可以有多个过滤器
过滤器就是一个函数,基于所给的参数限制查询集结果
从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. apache配置中ProxyPassReverse指令的含义

    apache中的mod_proxy模块主要作用就是进行url的转发,即具有代理的功能.应用此功能,可以很方便的实现同tomcat等应用服务器的整合,甚者可以很方便的实现web集群的功能. 例如使用ap ...

  2. Linux 源代码在线(http://lxr.linux.no/linux/)。

    LXR 是一个通用的源代码索引器和交叉引用器 它提供了一个基于 web 的可浏览任意定义以及任意标识的用法. 它支持很多种语言. LXR 曾经被作为 “Linux 交叉引用器” 但是已经被证明它可以用 ...

  3. 谈谈选用技术的原则,技术学习方法技巧,阅读代码的技巧及其它 MSF的一点心得

    谈谈技术原则,技术学习方法,代码阅读及其它(正文) 这篇文章是前一阵在水木BBS上和别人讨论中偶自己发言的摘编,是偶这几年开发过程完全经验式的总结.完全个人经验,供批判. 一.选用技术的原则 比较规范 ...

  4. linux达人养成计划学习笔记(六)—— 挂载命令

    一.查询与自动挂载 mount #查询系统中已挂载的设备 mount -a #根据配置文件/etc/fstab的内容,自动挂载 二.挂载命令格式 mount [-t 文件系统] [-o 特殊选项] 设 ...

  5. 安卓高手之路之ClassLoader(二)

    因为ClassLoader一定与虚拟机的启动有关系,那么必须从Zygote的启动开始看代码.下面就分析一下这些代码,行数不多: int main(int argc, const char* const ...

  6. aaronyang的百度地图API之LBS云 笔记[开发准备]

    我的脚印 1.注册百度账号 先到163邮箱注册个邮箱(注册邮箱),用这个邮箱注册百度账号(注册百度),激活百度账号 2.登陆百度账号,进入 百度地图 申请为LBS开发者 2.1 注册申请为百度开发者( ...

  7. 使用grep恢复被删文件内容

    在Unix/Linux下,最危险的命令恐怕就属rm命令了,每次在root下使用这个命令的时候,我都要盯着命令行看上几分钟才敢把回车敲下去.以前,看到同事在脚本中使用rm命令 —— rm {$App_D ...

  8. UI自动化测试元素定位思想

    2014年的最后一天,以一篇短文纪念一下. 经常看到有同学说UI自动化测试定位难,找不到北.这话是不错的,定位是难,灵活且复杂,需要经验加技术,但是有写东西是可以提炼出来作为思想去推而广之的. 简单来 ...

  9. 验证码识别 图像降噪 Python (一)

    原始图片: 降噪后的图片 实现代码: # coding:utf-8 import sys, os from PIL import Image, ImageDraw # 二值数组 t2val = {} ...

  10. elasticsearch 性能监控基础

    一.Elasticsearch 是什么 Elasticsearch是一款用Java编写的开源分布式文档存储和搜索引擎,可以用于near real-time存储和数据检索. 1.Elasticsearc ...