python_django_models模块中的查询
查询集:表示从数据库获取的对象集合,查询集可以有多个过滤器,过滤器就是一个函数(方法),基于所给参数限制查询集结果
从sql角度来说,查询集和select等价,过滤器和where等价
查询集特点:
惰性执行:创建查询集不会带来任何的数据访问,直到调用数据(要用滴时候)时,才会访问数据
直接访问数据的情况(直接向数据库拿):迭代/序列化/与if合用
返回查询集的方法称为过滤器
过滤器方法:
返回一堆数据的过滤器:
| all() | 返回查询集中所有的对象(有啥返回啥) |
| filter() |
返回符合条件的数据值 格式:.filter(键=值) .filter(键=值,键=值) .filter(键=值).filter(键=值) |
| exclude() | 过滤掉符合条件的数据值 |
| order_by() | 排序 |
| values() | 返回查询集中具体的数据值(一个列表,其中一条数据就是一个对象) |
返回单个数据的过滤器:
| get() |
返回一个满足条件的对象 注:若没有找到符合条件的对象,会引发模型类DoesNotExist异常 若找到多个对象,会引发模型类MultipleObjectReturned异常 |
| count() | 返回当前查询集的对象个数 |
| first() | 返回查询集的第一个对象 |
| last() | 返回查询集的最后一个对象 |
| exists() | 判断查询集中是否有数据,若有数据返回True |
限制查询集:查询集返回列表,可以使用下标的方法进行限制,等同于sql中的limit语句
注:下标不能是负数
举个栗子:
显示前5条:studentList=Students.stuObj1.all()[0:5]
分页显示:studentList=Students.stuObj1.all()[(page-1)*5:page*5]
查询集的缓存:每个查询集都包含一个缓存来最小化的对数据库进行访问
在新建的查询集中,缓存首次为空,第一次对查询集求值,会发生数据缓存,
django会将查询出来的数据做一个缓存,并返回查询结构,以后的查询直接使用查询集的缓存
字段查询:
概述:实现类sql中where语句,作为方法filter(),exclude(),get()的参数
语法:属性名称__比较运算符 = 值
外键:属性名_id
比较运算符:
| exact | exact:判断(大小写敏感,在前面加上i, iexact就表示不区分大小写) |
| contains | 是否包含(大小写敏感,在前面加上i,icontains就表示不区分大小写)(例:studentsList = Students.stuObj1.filter(name__icontains="ni")) |
| startswith/endswith | 以value开头或结尾(大小写敏感,在前面加上i,istartswith/iendswith就表示不区分大小写)(例:.filter(name__istartswith="ni")) |
| isnull/isnotnull | 是否为空(例:.filter(name__isnull=True)) |
| in | in:是否包含在范围内(例:.filter(pk__in=[2,3,4,6,8])) (【pk】主键) |
| gt/gte/lt/lte | 大于/大于等于/小于/小于等于(例:.filter(age__gt=30)) |
| year/month/day/week_day/hour/minute/second | 匹配年/月/日....(例:.filter(lastTime__year=2017)) |
跨关联查询:
处理join查询(连接查询)
语法:模型类名__属性名__(比较运算符)
举个栗子:
grade = Grades.objects.filter(students__contend__contains='nili') # 模型类名__属性名__比较运算符
# 带有‘nili’这几个字母的数据是属于哪个班级的
print(grade)
查询快捷:
pk(主键)
聚合函数:使用aggregate()函数返回聚合函数的值
| Avg | 平均值 |
| Count | 计数 |
| Max | 最大值 |
| Min | 最小值 |
| Sum | 求和 |
举个栗子:
from django.db.models import Max
def studentsearch(request):
maxAge = Students.stuObj1.aggregate(Max('age'))
print(maxAge)
F对象:
可以使用模型的A属性与B属性进行比较,且支持F对象的算术运算
举个栗子:
from django.db.models import F def grades(request):
g = Grades.objects.filter(girl_num__gt=('boy_num')+20)
print(g)
return HttpResponse('....')
Q对象:
过滤器的方法中的关键字参数,进行or查询就可以使用Q对象
举个栗子:
from django.db.models import F,Q def studentss(request):
studentsList = Students.stuObj1.filter(Q(pk__lte=3)|Q(age__gt=50)) # 或 pk(主键)
studentsList = Students.stuObj1.filter(Q(pk__lte=3)) # 只用于匹配
studentsList = Students.stuObj1.filter(~Q(pk__lte=3)) # 取反
python_django_models模块中的查询的更多相关文章
- Oracle采购模块中的多组织访问控制(MOAC)
1. 概述 从Release12开始启用多组织访问控制功能,将允许用户在一个单独的职责中访问一个或者多个经营单位(OU-Operation Units)的数据.这个功能允许用户在一个可共享服务的 ...
- Stitching模块中leaveBiggestComponent初步研究
在Stitching模块中以及原始论文<Automatic Panoramic Image Stitching using Invariant Features>3.2中,都有" ...
- express模块中的req,res参数的常用属性方法
express模块中的req,res参数的常用属性方法 const express = require('express'); const router = express.Router() rout ...
- 在微信框架模块中,基于Vue&Element前端,通过动态构建投票选项,实现单选、复选的投票操作
最近把微信框架的前端改造一下,在原来基于Bootstrap框架基础上的微信后台管理,增加一套Vue&Element的前端,毕竟Vue的双向绑定开发起来也还是很方便的,而且Element本身也提 ...
- 【Win 10 应用开发】分析 URI 中的查询字符串
分析URI中的字符有K种方法(K >= 2),如果查询字符串中的参数比较简单,可以通过子字符串查找的方式来处理:如果查询字符串相对复杂,你可以使用正则表达式来匹配 key1=value1 , ...
- mybatis中的查询缓存
一: 查询缓存 Mybatis提供查询缓存,用于减轻数据压力,提高数据库压力. Mybatis提供一级缓存和二级缓存. 在操作数据库时需要构造SqlSession对象,在对象中有一个数据结构(Hash ...
- Nginx基础知识之————RTMP模块中的中HLS专题(翻译文档)
一.在Nginx配置文件的RTMP模块中配置hls hls_key_path /tmp/hlskeys; 提示错误信息: nginx: [emerg] the same path name " ...
- 一个Angular模块中可以声明哪些组件?
一个Angular模块中可以声明哪些组件? (1) controller 控制器 (2) directive 指令 (3) function ...
- 完善ext.grid.panel中的查询功能(紧接上一篇)
今天的代码主要是实现,Ext.grid.panel中的查询,其实我也是一名extjs新手,开始想的实现方式是另外再创建一个新的grid类来存放查询出的数据(就是有几个分类查询就创建几个grid类),这 ...
随机推荐
- C#WinForm 窗体单例模式 反射单例
做了个mdi窗体 原以为指定一下MDIParent就可以了 没想到多次点击会出现多个窗体的现像 所以用到了单例模式 做法是这样的(学习出处:连接) 1.在子窗体声明一个子窗体类型的私有静态变量 并把子 ...
- Neo4j Cypher查询语言详解
Cypher介绍 "Cypher"是一个描述性的图形查询语言,允许不必编写图形结构的遍历代码对图形存储有表现力和效率的查询.Cypher还在继续发展和成熟,这也就意味着有可能会出现 ...
- 一个服务io占满,服务器无响应
(1).服务器io占满,服务无响应, sar -q -f /var/log/sa/sa28 上图显示plist-sz 增加了一倍 plist-sz 说明:进程列表中的进程(processes)和线程 ...
- centos6.5下,使用虚拟ftp用户
因为业务的问题,有位客户的账户总是出现各种问题,本人对于acl的使用又不是很会,所以和同事一起研究了一下这个虚拟ftp用户. Centos6.5 1 需求 为了保证系统的安全性,现对系统中vsftpd ...
- Redmine 和GitBlit仓库服务器整合
运行环境: RedMine: 4.0.4 Git 仓库: Gitbilt V1.8.0 必须: Redmine 安装并可运行 Redmine运行的主机里面已经安装了 Git,因需要在命令行中运行 gi ...
- WordPress .gitignore
# ----------------------------------------------------------------- # .gitignore for WordPress @salc ...
- SSH连接时,长时间不操作就断开的解觉办法
1.第一次尝试失败 修改/etc/ssh/sshd_config文件, 找到 ClientAliveInterval 0 ClientAliveCountMax 3 并将注释符号("#&qu ...
- Batch - FINDSTR
总结 Searches for strings in files. 在文件中寻找特定的字符串 官方文档 C:\Users\cuixunxu>FINDSTR /? Searches for str ...
- Andriod Unity 调用android函数
//首先这是一个前沿 //我看了多的资料,还看了近半个小时的 android activity 的讲解 终于打出了apk //接下来开始 //一步一步的跟着我走 1.创建一个android项目或者一个 ...
- Android Android Studio 如何导出 Jar 给 Unity 使用
大致步骤如下: 1.创建新的 Android Studio 工程 2.为此 Android Studio 工程创建 Android Library 类库(也就是一个 Module)(后面就是用它生成 ...