1.count():计算数据的个数。

计算数据的个数可以使用count,在python中使用len()也可以计算数据的个数,但是相对来说效率没有使用count()效率高,因为在底层是使用select count(*) 直接在sql层面就计算了数据的个数,而len()是将数据提取到内存中计算数据的个数。因此比使用len函数更高效。
示例代码如下:
  1. from django.http import HttpResponse
  2. from .models import Book
  3. from django.db import connection
  4. def index10(request):
  5. # 计算book表中有多少条数据
  6. book_nums = Book.objects.count()
  7. print(book_nums)
  8. print(connection.queries)
  9. return HttpResponse('success')
执行的结果如下:
  1. 7
  2. [{'sql': 'SELECT @@SQL_AUTO_IS_NULL', 'time': '0.000'},
  3. {'sql': 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED', 'time': '0.000'},
  4. {'sql': 'SELECT COUNT(*) AS `__count` FROM `book`', 'time': '0.032'}]
使用len函数计算book表中数据的多少,示例代码如下:
  1. def index10(request):
  2. book_nums = Book.objects.all()
  3. print(len(book_nums))
  4. print(connection.queries)
  5. return HttpResponse('success')
  1. 7
  2. [07/Feb/2020 08:07:04] "GET / HTTP/1.1" 200 7
  3. [{'sql': 'SELECT @@SQL_AUTO_IS_NULL', 'time': '0.000'},
  4. {'sql': 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED', 'time': '0.000'},
  5. {'sql': 'SELECT `book`.`id`, `book`.`name`, `book`.`pages`, `book`.`price`, `book`.`rating`, `book`.`author_id`, `book`.`publisher_id`, `book`.`score` FROM `book`', 'time': '0.000'}]

2.first和last:分别是提取数据库表中第一条数据和最后一条数据。

示例代码如下:
  1. def index(request):
  2. # 2. first和last分别是提取数据库表中第一条数据和最后一条数据
  3. book_first = Book.objects.first()
  4. book_last = Book.objects.last()
  5. print(book_first)
  6. print(book_last)
  7. print(connection.queries)
  8. return HttpResponse('success')
执行的结果如下:
  1. (书名:三国演义,页数:893,价格:129.0,打折:0.8,作者:罗贯中,47,312587329@qq.com,出版社: ->:清华大学出版社)
  2. (书名:精彩极了,页数:333,价格:15.0,打折:3.5,作者:孤烟,20,7828749204@qq.com,出版社: ->:清华大学出版社)
  3. [{'sql': 'SELECT @@SQL_AUTO_IS_NULL', 'time': '0.000'},
  4. {'sql': 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED', 'time': '0.000'},
  5. {'sql': 'SELECT `book`.`id`, `book`.`name`, `book`.`pages`, `book`.`price`, `book`.`rating`, `book`.`author_id`, `book`.`publisher_id`, `book`.`score` FROM `book` ORDER BY `book`.`id` ASC LIMIT 1', 'time': '0.000'}, {'sql': 'SELECT `book`.`id`, `book`.`name`, `book`.`pages`, `book`.`price`, `book`.`rating`, `book`.`author_id`, `book`.`publisher_id`, `book`.`score` FROM `book` ORDER BY `book`.`id` DESC LIMIT 1', 'time': '0.000'},
  6. {'sql': 'SELECT `author`.`id`, `author`.`name`, `author`.`age`, `author`.`email` FROM `author` WHERE `author`.`id` = 5 LIMIT 21', 'time': '0.016'},
  7. {'sql': 'SELECT `publisher`.`id`, `publisher`.`name` FROM `publisher` WHERE `publisher`.`id` = 2 LIMIT 21', 'time': '0.094'},
  8. {'sql': 'SELECT `author`.`id`, `author`.`name`, `author`.`age`, `author`.`email` FROM `author` WHERE `author`.`id` = 6 LIMIT 21', 'time': '0.000'},
  9. {'sql': 'SELECT `publisher`.`id`, `publisher`.`name` FROM `publisher` WHERE `publisher`.`id` = 2 LIMIT 21', 'time': '0.000'}]

3. exists:判断某条数据是否存在,存在的话就返回True,不存在的话,就返回False。

django底层只查询一次的方式,示例代码如下:
  1. def index(request):
  2. # 只查询一次的判断方式
  3. book = Book.objects.filter(name='西游记').exists()
  4. print(book)
  5. print(connection.queries)
  6. return HttpResponse('success')
打印出结果如下:
  1. True
  2. [{'sql': 'SELECT @@SQL_AUTO_IS_NULL', 'time': '0.000'},
  3. {'sql': 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED', 'time': '0.000'},
  4. {'sql': "SELECT (1) AS `a` FROM `book` WHERE `book`.`name` = '西游记' LIMIT 1", 'time': '0.141'}]
使用count判断某条数据是否存在,示例代码如下:
  1. def index(request):
  2. book = Book.objects.filter(name='三国演义').count()
  3. if book > 0:
  4. print("你好这本书还有")
  5. print(connection.queries)
  6. return HttpResponse('success')
django底层执行的sql语句为:
  1. 你好这本书还有
  2. [{'sql': 'SELECT @@SQL_AUTO_IS_NULL', 'time': '0.000'},
  3. {'sql': 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED', 'time': '0.000'},
  4. {'sql': "SELECT COUNT(*) AS `__count` FROM `book` WHERE `book`.`name` = '三国演义'", 'time': '0.000'}]
直接使用if语句进行判断QuerySet,相对来说,这种方法最慢,示例代码如下:
  1. def index(request):
  2. if Book.objects.filter(name='冠岩'):
  3. print("存在")
  4. else:
  5. print("不好意思,这本书不存在")
  6. print(connection.queries)
  7. return HttpResponse('success')
django底层执行的sql语句为:
  1. 不好意思,这本书不存在
  2. [{'sql': 'SELECT @@SQL_AUTO_IS_NULL', 'time': '0.000'},
  3. {'sql': 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED', 'time': '0.000'},
  4. {'sql': "SELECT `book`.`id`, `book`.`name`, `book`.`pages`, `book`.`price`, `book`.`rating`, `book`.`author_id`, `book`.`publisher_id`, `book`.`score` FROM `book` WHERE `book`.`name` = '冠岩'", 'time': '0.000'}]

总结:判断某个条件的数据是否存在。如果要判断某个条件的元素是否存在,那么使用exists()要比使用count或者是直接使用QuerySet更加有效的多。

89.QuerySet API常用方法使用详解:count,first,last,aggregate,exists的更多相关文章

  1. 90.QuerySet API方法使用详解:distinct

    distinct:去掉获取的数据中的重复数据,这个方法如果底层使用的数据库是mysql,那么就不能传递任何参数. (1)比如以下我们想要实现提取所有价格超过80元的图书,并且删掉那些重复的,那么可以使 ...

  2. 供应商API补充(详解EBS接口开发之供应商导入)(转)

    原文地址  供应商导入的API补充(详解EBS接口开发之供应商导入) --供应商 --创建 AP_VENDOR_PUB_PKG.Create_Vendor ( p_api_version IN NUM ...

  3. mysqli一些常用方法及详解

    mysqli一些常用方法及详解 1.die()函数:表示向用户输出引号中的内容后,程序终止运行,提示定制的出错信息 ex: $conn = mysqli_connect("localhost ...

  4. 如何设计提高服务API的安全性(二)API密钥方式详解

    在上文已经讲述了基础介绍,这篇文章详细讲解API密钥方式. 利用何种加密方式呢? 经过上面加密算法的理解,单向加密不仅性能高,而且有压缩性,即长度一致,有效减少网络传输过程中的字节大小.适合我们这种调 ...

  5. SpringCloud微服务项目实战 - API网关Gateway详解实现

    前面讲过zuul的网关实现,那为什么今天又要讲Spring Cloud Gateway呢?原因很简单.就是Spring Cloud已经放弃Netflix Zuul了.现在Spring Cloud中引用 ...

  6. Requests库常用方法及其详解

    request库七个方法详解 1. request方法 所有方法的的基础方法,三个参数:method,url,**kwargs. 1.1 method:请求方式 method参数共有七个可选的值,分别 ...

  7. 转:基于科大讯飞语音API语音识别开发详解

    原文来自于: http://www.52wulian.org/android_voice/ 最近项目需要用到android语音识别,立马就想到科大讯飞,结合官方实例及阅读API文档,初步的完成了And ...

  8. 百度地图API使用方法详解

    最近做了个项目,其中项目中有个需求需要用到百度地图进行导航,通过查阅相关资料参考百度地图api完成了一个例子. API地址:http://developer.baidu.com/map/jsdemo. ...

  9. ASP.NET Web API 入门示例详解

    REST服务已经成为最新的服务端开发趋势,ASP.NET Web API即为.NET平台的一种轻量级REST架构. ASP.NET Web API直接借鉴了ASP.NET MVC的设计,两者具有非常类 ...

随机推荐

  1. 洛谷 P2549 计算器写作文

    题目传送门 解题思路: 背包,f[i]表示计算器位数为i时,可获得的最大分值. 本题与01背包不同的地方在于,物品的摆放顺序对答案是有影响的,例如两个字符串a,b,那么就会出现a+b和b+a两种情况( ...

  2. linux添加一个已经存在用户到一个用户组

    在使用virtual-box的共享文件时,在虚拟机中共享文件的用户为root,用户组为vboxsf, 所以需要将自己添加到vboxsf这组当中去,一开始使用useradd老是失败,后来才查到要用use ...

  3. CSS - input 只显示下边框

      CSS 样式 :   border:none;   border-bottom: 1px solid #000

  4. React+Flask打造前后端分离项目开发环境

    目录 前言 Backend-Flask Frontend-React Done References 前言 新的一年,开始水第一篇技术文.碰巧最近React玩得多,撸一篇文章纪念一下开发环境的搭建.

  5. hdu1222Wolf and Rabbit (公约数的巧题)

    一个很坑的问题,想到点子上很好解决,想不到的话头破也不一定能做出来. There is a hill with n holes around. The holes are signed from 0 ...

  6. python EasyUI + Django--整合 CSRF 防护去除

    先来张完整图: 关于Django 得CSRF  中间件      防护   GET 是不做CSRF验证得   但POST 默认验证  $.cookie('csrftoken'))    "v ...

  7. AVCodec 结构体

    typedef struct AVCodec { // 标示Codec 的名字, 比如,"h264" "h263" 等. const char *name; / ...

  8. C++ STD Gems03

    transform.for_each #include <iostream> #include <vector> #include <string> #includ ...

  9. UVA 11992 懒惰标记应用

    这个题目要求和 还有 设置区间值 区间增值,明显要用线段树来 由于行数不超过20 而列数多达 10^5,所以对每一行建一棵线段树. 然后主要是在懒惰标记方面是难点 针对两种操作 分别设置 set 和 ...

  10. python print %s 号格式化输出

    python %号格式化输出: 一种字符串格式化的语法, 基本用法是将值插入到%s占位符的字符串中. %s,表示格式化一个对象为字符 "%±(正负号表示)3(数字表示字符串的长度)s&quo ...