查询集

  • 两大特性

    • 惰性执行:创建查询集不会访问数据库,直到调用数据时,才会访问数据库,调用数据的情况包括迭代、序列化、与if合用
    • 缓存:查询集的结果被存下来之后,再次查询时会使用之前缓存的数据
  • 返回列表的过滤器如下:
    • all():返回所有数据
    • filter():返回满足条件的数据
    • exclude():返回满足条件之外的数据,相当于sql语句中where部分的not关键字
    • order_by():排序,默认升序,降序的话在条件前加减号(-)

返回的QuerySet类型可以继续调用查询方法。也就是可以含有零个、一个或多个过滤器。

  • 返回单个值的过滤器如下:

    • get():返回单个满足条件的对象

      • 如果未找到会引发"模型类.DoesNotExist"异常
      • 如果多条被返回,会引发"模型类.MultipleObjectsReturned"异常
  • 与sql语句相比,查询集和select语句等价,过滤器像where和limit子句
  • aggregate():聚合
  • exists():判断查询集中是否有数据,如果有则返回True,没有则返回False
  • 查询集 可以像列表一样进行切片。

字段查询

  • 在Django的shell中 用__来连接属性名(sql中叫字段)和比较运算符,类似sql语句中的空格
  • 属性名称__比较运算符=值
    比如:类名.objects.filter(类属性__isnull=False)

条件运算符主要有:

  • __exact:表示判等
  • __contains:是否包含
  • __startswith、__endswith:以指定值开头或结尾
  • __isnull:是否为null

        (以上运算符都区分大小写,在这些运算符前加上i表示不区分大小写,如__iexact、__icontains、__istartswith、__iendswith)

  • __in:是否包含在范围内
  • __gt、__gte、__lt、__lte:大于、大于等于、小于、小于等于,(不等于使用等于的运算符,使用exclude()过滤器)
  • __year、__month、__day、__week_day、__hour、__minute、__second:对日期时间类型的属性进行运算

关联查询

  • Django中也能实现类似于join查询,要查那个类中的数据就从那个类来查,写关联条件时如果类中没有关联属性,要写类的名字小写,有关联属性就写关联属性.语法如下:
要查的模型.objects.过滤器(关联模型类名小写[或关联属性]__属性名[__运算符]=值)

F对象

  • 对象的属性与属性值比较,从django.db.models导入F对象。语法如下:
from django.db.models import F
F(属性名)

可以在F()对象上使用算数运算

Q对象

from django.db.models import F
Q(属性名__运算符=值)
  • 多个过滤器逐个调用表示逻辑与关系,同sql语句中where部分的and关键字,如果需要实现逻辑或or的查询,需要使用Q()对象结合|运算符。(实际上Q对象,在我的理解就是相当于())
  • Q对象可以使用&、|连接,&表示逻辑与,|表示逻辑或,Q对象前使用~操作符,表示非not
  • 从django.db.models导入Q对象。语法如下:

聚合函数

  • 使用aggregate()过滤器调用聚合函数,返回一个字典。
  • 从django.db.models中导入聚合函数,包括:Avg,Count,Max,Min,Sum

跟聚合相关的还有一个count()函数 返回的是一个数字。

Django边学边记—模型查询的更多相关文章

  1. Django边学边记—新手Django建项目各流程细节

    一.准备虚拟环境 1)安装 virtualenv pip install virtualenv 2)virtualenvwrapper pip install virtualenvwrapper-wi ...

  2. Django边学边记——中间件

    特点 Django中的中间件是一个轻量级.底层的插件系统,可以介入Django的请求和响应处理过程,用于全局修改Django的输入或输出. 每个中间件组件负责做一些特定的功能.中间件全部注册在sett ...

  3. Django边学边记—静态文件

    概念 项目中的CSS.图片.js都是静态文件 一般会将静态文件放到一个单独的目录中,以方便管理 在html页面中调用时,也需要指定静态文件的路径,Django中提供了一种解析的方式配置静态文件路径 静 ...

  4. Django边学边记—模板

    功能 产生html,且不仅仅是一个html 包含: 静态内容:html,css,js 动态内容:模板语言 使用 一般使用 Django中提供的简写函数render调用模板 render(request ...

  5. Django边学边记—视图

    一. url (一)配置 在项目/settings.py中通过ROOT_URLCONF指定url配置 ROOT_URLCONF = 'XXXX.urls' 打开 项目/urls.py 配置 (二)语法 ...

  6. Django边学边记--状态保持(cookie和session)

    Cookie 概念: Cookie,也叫Cookies,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密),好比会员卡或餐票. 特点: Cookie是由服务 ...

  7. django模型查询操作

    一旦创建好了数据模型,Django就会自动为我们提供一个数据库抽象API,允许创建.检索.更新和删除对象操作 下面的示例都是通过下面参考模型来对模型字段进行操作说明: from django.db i ...

  8. django 数据库配置 ,APP 迁移.模型基础

    # 1.数据库的连接配置django 连接mysql的配置流程:- 安装 pymysql pip install pymysql- 创建数据库用户有创建数据库权限的用户- 创建数据库crm .进入数据 ...

  9. Django:学习笔记(6)——模型

    Django:学习笔记(6)——模型 快速上手 模型到底是什么呢?我们可以想,如果一张数据表的各个字段可以自动映射到一个类的各个属性,则每条记录对应这个类的一个对象.那我们通过类方法来操作对象(即表记 ...

随机推荐

  1. 42岁大龄程序员的迷茫,看我最新尝鲜.net 5+Dapper搭建的WebAPI框架

    42岁大龄程序员的迷茫 我真傻,真的.我单知道雪天是野兽在深山里没有食吃,会到村里来;我不知道春天也会有-- 我真傻,真的.我单知道程序员要活到老学到老,年龄大了要失业;我不知道码农(新型农民工)也会 ...

  2. 解决docker-compose下载过慢

    https://blog.csdn.net/baidu_21349635/article/details/104628772

  3. SQL 练习28

    查询平均成绩大于等于 85 的所有学生的学号.姓名和平均成绩 SELECT Student.SId,Student.Sname,平均成绩 FROM Student , (SELECT sid,AVG( ...

  4. Nebula 2.5.0安装过程及遇到的坑

    2021年8月23日,Nebula 发布了最新版本:2.5.0,正好赶上新环境部署,记录一下安装过程及遇到的坑: 一.准备工作 以下安装使用nebula用户,搭建集群模式,一共三台机器:192.168 ...

  5. 备战秋招之十大排序——O(nlogn)级排序算法

    时间复杂度O(nlogn)级排序算法 五.希尔排序 首批将时间复杂度降到 O(n^2) 以下的算法之一.虽然原始的希尔排序最坏时间复杂度仍然是O(n^2),但经过优化的希尔排序可以达到 O(n^{1. ...

  6. @ImportResource-SpringBoot使用xml配置Bean

    前言 SpringBoot推荐使用注解的方式去声明bean,但还是提供了xml的方式去加载bean 一.创建要声明为bean的实体类 WzqEntity.java package com; /** * ...

  7. C++面试题(四)——智能指针的原理和实现

    C++面试题(一).(二)和(三)都搞定的话,恭喜你来到这里,这基本就是c++面试题的最后一波了.     1,你知道智能指针吗?智能指针的原理.     2,常用的智能指针.     3,智能指针的 ...

  8. C#的生产者和消费者 实例

    class Program { //写线程将数据写入myData static int myData = 100; //读写次数 const int readWriteCount = 20; //fa ...

  9. C程序设计学习笔记(完结)

    时间:2015-4-16 09:17 不求甚解,每有会意,欣然忘食.学习的过程是痛苦的 第1章    程序设计和C语言     第2章    算法--程序的灵魂   -算法的五个特点          ...

  10. MySQL之连接查询和子查询

    多表连接的基本语法 多表连接,就是将几张表拼接为一张表,然后进行查询 select 字段1, 字段2, ... from 表1 {inner|lift|right} join 表2 on 连接条件; ...