查询集:表示从数据库获取的对象集合,查询集可以有多个过滤器,过滤器就是一个函数(方法),基于所给参数限制查询集结果
从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模块中的查询的更多相关文章

  1. Oracle采购模块中的多组织访问控制(MOAC)

     1. 概述 从Release12开始启用多组织访问控制功能,将允许用户在一个单独的职责中访问一个或者多个经营单位(OU-Operation Units)的数据.这个功能允许用户在一个可共享服务的 ...

  2. Stitching模块中leaveBiggestComponent初步研究

    在Stitching模块中以及原始论文<Automatic Panoramic Image Stitching using Invariant Features>3.2中,都有" ...

  3. express模块中的req,res参数的常用属性方法

    express模块中的req,res参数的常用属性方法 const express = require('express'); const router = express.Router() rout ...

  4. 在微信框架模块中,基于Vue&Element前端,通过动态构建投票选项,实现单选、复选的投票操作

    最近把微信框架的前端改造一下,在原来基于Bootstrap框架基础上的微信后台管理,增加一套Vue&Element的前端,毕竟Vue的双向绑定开发起来也还是很方便的,而且Element本身也提 ...

  5. 【Win 10 应用开发】分析 URI 中的查询字符串

    分析URI中的字符有K种方法(K >= 2),如果查询字符串中的参数比较简单,可以通过子字符串查找的方式来处理:如果查询字符串相对复杂,你可以使用正则表达式来匹配 key1=value1 ,  ...

  6. mybatis中的查询缓存

    一: 查询缓存 Mybatis提供查询缓存,用于减轻数据压力,提高数据库压力. Mybatis提供一级缓存和二级缓存. 在操作数据库时需要构造SqlSession对象,在对象中有一个数据结构(Hash ...

  7. Nginx基础知识之————RTMP模块中的中HLS专题(翻译文档)

    一.在Nginx配置文件的RTMP模块中配置hls hls_key_path /tmp/hlskeys; 提示错误信息: nginx: [emerg] the same path name " ...

  8. 一个Angular模块中可以声明哪些组件?

    一个Angular模块中可以声明哪些组件? (1) controller        控制器 (2) directive                指令 (3) function         ...

  9. 完善ext.grid.panel中的查询功能(紧接上一篇)

    今天的代码主要是实现,Ext.grid.panel中的查询,其实我也是一名extjs新手,开始想的实现方式是另外再创建一个新的grid类来存放查询出的数据(就是有几个分类查询就创建几个grid类),这 ...

随机推荐

  1. springMvc请求路径解析

    一开始我的代码是: //index.jsp<%@ page contentType="text/html;charset=UTF-8" language="java ...

  2. keepalived高可用haproxy负载均衡varnish缓存wordpress的动静分离(第一次配置成功)

    haproxy和nginx都可以作为七层和四层反代服务器对外提供服务,此文通过haproxy和keealived配置varnish搭建wordpress的动静分离站点 一.实验环境 五台虚拟机: ha ...

  3. 高并发下的缓存架构设计演进及redis常见的缓存应用异象解决方案

    待总结 缓存穿透 缓存击穿 缓存雪崩等

  4. Redis数据结构之整数集合-intset

    当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis会使用整数集合(intset)来存储集合元素. intset是紧凑的数组结构,同时支持16位.32位和64位整数. 结构 struc ...

  5. 初探Javascript魅力(1)

    转自:CSDN--http://blog.csdn.net/cherry_vicent/article/details/42120149 1.javascript是什么   根据用户的一些操作,然后来 ...

  6. Mycat搭建负载均衡,读写分离的Mysql集群

    Mycat搭建负载均衡,读写分离的Mysql集群 准备环境 1.mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz 2.Mycat-server-1.6.7.4-te ...

  7. Thymeleaf语法总结

    Thymeleaf是Spring boot推荐使用的模板引擎. 一.th属性 html有的属性,Thymeleaf基本都有,而常用的属性大概有七八个.其中th属性执行的优先级从1~8,数字越低优先级越 ...

  8. Mac电脑最常见的办公软件是什么?Notion for Mac多功能办公笔记软件使用方法

    Notion for Mac是一款最新的高效率.办公类软件,相信许多用户在办公的时候需要打开特别多的在线工具,譬如Google Drive.Dropbox Paper.Confluence.GitHu ...

  9. Java中JNI的使用详解第六篇:C/C++中的引用类型和Id的缓存

    首先来看一下C/C++中的引用 从Java虚拟机创建的对象传到本地C/C++代码时会产生引用,根据Java的垃圾回收机制,只要有引用存在就不会触发该引用指向的Java对象的垃圾回收 第一.局部引用: ...

  10. 经典换根dp——hdu2196

    给定一棵边权树,求距离每个点最远的点,输出这个距离 #include<bits/stdc++.h> using namespace std; #define N 10005 ]; int ...