Django运算表达式与Q对象/F对象
Django运算表达式与Q对象/F对象
1 模型查询
概述:
1 查询集:表示从数据库中获取的对象的集合
2 查询集可以有多个过滤器,通过 逻辑运算符连接
3 过滤器就是一个函数,基于所给的参数限制查询的结果,类似MySQL模糊查询中where语句
4 查询集等同select语句
2 查询集
特点:
1 查询集通过调用过滤器方进行查询, 查询集经过过滤器筛选后返回新的查询集,可以链式调用
2 惰性执行 创建查询集不会带来任何数据库的访问直到调用数据库才会访问返回单个数据查询:
get() 返回一个满足条件的对象注意:没有找到符合条件的对象,模型类引发异常 模型类.DoesNotExists异常如果找到多个对象也会引发异常 模型类.MultipleObjectsReturned
count() 返回查询集中的对象个数
first() 返回第一个查询集对象
last() 返回最后一个查询集对象
exists() 查询集是否有数据,如果有数据返回true限制查询集:查询集返回的是列表,可以采用下标的方法进行限制,等同于sql中的limit语句
studentList = Student.objects.all()[0:5]查询集缓存 : 每个查询集都包含一个缓存,来最小化的对数据库访问。在新建的查询集中,缓存首次为空,第一次对查询 集求值,django会将数据缓存,并返回结果,以后结果直接使用缓存集的数据
3 常见过滤器
all() 返回所有对象
filter() filter(键=值,键=值) 且关系返回符合条件的数据filter(键=值),filter(键=值)
exclude() 过滤掉符合条件数据
order_by() 排序
values() 一条数据就是是一个对象(字典),返回一个列表
4 比较运算符
(1)概述: 实现where语句,作为filter() exclude() get()的参数语法: 属性名称__运算符 = 值外键: 属性名_id转义: 类似like语句,是为了匹配占位,匹配数据中的%,sql中where like '\%'filter(sname__contains = '%')(2)常见的比较运算符:exact 判断,大小写敏感filter(isDelete=False)contains 是否包含,大小写敏感stuList = Student.objects.filter(sname__contains ='孙' )startswith 以value开头,大小写敏感stuList = Student.objects.filter(sname__startswith ='孙' )endwith 以value结尾,大小写敏感 in 是否包含在范围内 filter(pk__in=[2,4,6,8,10])注: 以上四个前面加上i,就表示不区分大小写,iexact,icontains,istartswith,iendswith(3) 其他形式查询
为空判断:isnull ,isnotnull 是否为空 filter(sname__isnull=Flase)
比较运算:gt 大于gte 大于等于lt 小于lte 小于等于filter(sage_gt=30)年龄大于30
时间查询:year/month/day/week_day/hour/minute/second filter(lastTime__year=2017)跨关查询 处理join查询 模型类型__属性名__运算符(可选)查询快捷 pk 代表的主键
5 F对象与Q对象
常见的聚合函数:
使用aggregate()函数返回聚合函数的值
Avg Count Max Min sumfrom dango.db.models import Max
maxAge = Student.objects.aggregate(Max('sage')) 找出学生年龄最大的F对象
1 可以使用模型的A属性与B属性进行比较from django.db.models import F,Qdef grades(request):g = Grades.objects.filter(ggirlnum_gt=F('gboynum')) 找到女生人输大于男生人数的班级
2 支持F对象的算术运算 filter(ggirlnum_gt=F('gboynum')+20)
3 F对象的参数可以是跨表字段models.Book.objects.filter(bread_num=F(''author_name'))
4 F对象参数如果是date/time,可以进行日期的加减运算:models.Book.objects.filter(bpub_date__lt=F('bpub_date') + timedelta(days=5))Q对象
概述 过滤器的方法中的关键字参数,,条件为And模式,采用逻辑或引入Q对象
需求 进行or查询,或查询
解决 使用Q对象Q对象可以使用&(and)、|(or)操作符组合起来
studentList = Student.objects.filter(Q(pk__lt = 3)|Q(sage__gt=50)) pk_id小于3或年龄大于50岁
models.User.objects.filter(Q(username='老王') & Q(userpass='admin')) 条件与组合
models.User.objects.filter(~Q(username='老王')) 条件非表示取反
可以使用 &(and) |(or) ~(not) 结合括号进行分组,构造更复杂的Q对象
filter函数可以传递一个或多个Q对象作为位置参数,如果有多个Q对象,这些参数的逻辑为and下面分享一个综合用法:def get(self, request, *args, **kwargs):filters = request.GET#找出符合customer的数据转成列表Qs = [Q(customer=request.user.customer)]try:if 'limit' in filters:limit = abs(int(filters['limit']))if limit > 50:limit = 50else:limit = 15start_id = int(filters.get('start_id', 0))#添加符合start_id的对象Qs.append(Q(id__gt=start_id))#添加符合状态的stateif 'state' in filters:Qs.append(Q(state__in=filters['state']))else:Qs.append(Q(state__in=[0, 1, 2, 3, 4]))#添加符合title的数据if 'title' in filters:Qs.append(Q(title__contains=filters['title']))except Exception:return params_error({"filters": "过滤参数不合法"})#通过*Qs,对列表数据同时满足上述情况的数据进行总的帅选,并设置限制集sets = Questionnaire.objects.filter(*Qs)[:limit]
转载于:https://www.cnblogs.com/why957/p/9075171.html
Django运算表达式与Q对象/F对象相关推荐
- Django(22)-ORM中F对象和Q对象
Django(1)-简介 Django(2)-创建项目及默认项目目录结构介绍 Django(3)-配置文件详解 Django(4)-URL和视图 Django(5)-路由配置实例 Django(6)- ...
- Django中F对象,Q对象与运算符
在Django的模型中F对象与Q对象比较常用的,所以单独说一下: F对象 F对象位于django.dc.models模板下,使用的时候记得首先导入!!! 作用:F对象主要用于当模型的字段A与字段B进行 ...
- Django中的F对象和Q对象
F对象 可以获取到自己的属性值 实现自己的属性自己的属性关联的复杂条件 支持运算 Q对象 Q对象实际上是对条件的一个封装 封装后支持逻辑运算 与或非 & | ~ 支持嵌套 例子 from dj ...
- Django框架(12.Django中模型类高阶查询(Q对象以及F对象 和聚合函数查询))
Q对象 作用:用于查询时条件之间的逻辑关系.not and or,可以对Q对象进行 & | ~ 操作. & : 且 | : 或 ~ :非: 就 ...
- Django学习笔记(3):使用模型类进行查询(查询函数、F对象、Q对象、聚合函数、查询集、模型类关系、关联查询、自关联、管理器)
文章目录 1.查询函数 2.F对象 3.Q对象 4.聚合函数 5.Count函数 6.查询集 查询集的特性 对查询集进行切片 判断一个查询集中是否有数据 7.模型类之间的关系 一对多关系 多对多关系 ...
- 17.F对象与Q对象
F对象与Q对象也是ORM中的内容 目录 1 F对象 1.1 操作列值 1.2 并发计数 1.3 比较列值 2 Q对象 2.1 逻辑或 | 2.2 逻辑非 ~ 2.3 逻辑与 & ...
- Django(part28)--F对象
学习笔记,仅供参考 F对象 在Django中F是指一个类,我们可以通过这个类创建一个对象. 一个F对象代表数据库中某个字段(列)的信息,F对象通常是对数据库中的字段值在不加载到内存中的情况下直接在数据 ...
- django-查询-F对象-Q对象
Q对象 用法: Q(条件)例如 Q(id__gt=12) 代表,id大于12的条件Q对象通常会 与另一个Q对象进行比较,使用逻辑运算符来连接 用于查询条件之间的逻辑关系 not and or 可以对Q ...
- day056-58 django多表增加和查询基于对象和基于双下划线的多表查询聚合 分组查询 自定义标签过滤器 外部调用django环境 事务和锁...
一.多表的创建 from django.db import models# Create your models here. class Author(models.Model):id = model ...
最新文章
- 独家 | 深度学习基础——激活函数以及什么时候使用它们?(附代码)
- 深度丨霍金的去世让我想起了微软提出的人工智能十大原则
- Blink Coordinate Spaces
- H.264编码系统几个比较重要的算法
- 前端开发工程师做些什么?
- 数组越界怎么判断_算法连载之求解两个有序数组的中位数
- 情感分析--word2vec
- 问题 H: 方块填数(2012年蓝桥决赛第5题--dfs)
- 记录ishield遇到的问题的解决过程
- javaul材质包下载_只需一个水桶包 你就能装满时髦
- 首批马云援欧口罩运抵比利时eWTP枢纽
- 应用机器学习(八):线性模型
- Windows下jmeter安装
- 【GPS】 根据GPS坐标求取两点间距离算法
- python实现电脑自动开机_python自动循环定时开关机(非重启)测试
- Origin画图技巧之柱状图优化
- python 求最大值_Python 获取最大值函数
- 数学建模论文、代码降重小技巧
- sangerbox平台使用(五)venn图的绘制
- LQ0139 油漆面积【枚举】
热门文章
- wgan 不理解 损失函数_[图像盲去噪与GAN]GCBD翻译理解
- 跟我从零开始学python之一_从零开始学 Python 之运算符
- win10wifi间歇性断网重启后恢复_实用!Xbox Series X 在重启后也能快速恢复之前的游戏状态...
- php如何查看端口有没被占用,怎么查看80端口占用情况? 如何查看端口占用情况...
- 自主访问控制 强制访问控制_快速访问控制
- python多重继承_Python多重继承
- Java开发中出现OOM的常见原因有哪些?
- 目前人工智能技术趋势如何?
- 机器学习入门05 - 泛化 (Generalization)
- 轻松搞定对容器实例日志设置定期清理和回卷 1