89.QuerySet API常用方法使用详解:count,first,last,aggregate,exists
1.count():计算数据的个数。
计算数据的个数可以使用count,在python中使用len()也可以计算数据的个数,但是相对来说效率没有使用count()效率高,因为在底层是使用select count(*) 直接在sql层面就计算了数据的个数,而len()是将数据提取到内存中计算数据的个数。因此比使用len函数更高效。
示例代码如下:
from django.http import HttpResponse
from .models import Book
from django.db import connection
def index10(request):
# 计算book表中有多少条数据
book_nums = Book.objects.count()
print(book_nums)
print(connection.queries)
return HttpResponse('success')
执行的结果如下:
7
[{'sql': 'SELECT @@SQL_AUTO_IS_NULL', 'time': '0.000'},
{'sql': 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED', 'time': '0.000'},
{'sql': 'SELECT COUNT(*) AS `__count` FROM `book`', 'time': '0.032'}]
使用len函数计算book表中数据的多少,示例代码如下:
def index10(request):
book_nums = Book.objects.all()
print(len(book_nums))
print(connection.queries)
return HttpResponse('success')
7
[07/Feb/2020 08:07:04] "GET / HTTP/1.1" 200 7
[{'sql': 'SELECT @@SQL_AUTO_IS_NULL', 'time': '0.000'},
{'sql': 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED', '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`', 'time': '0.000'}]
2.first和last:分别是提取数据库表中第一条数据和最后一条数据。
示例代码如下:
def index(request):
# 2. first和last分别是提取数据库表中第一条数据和最后一条数据
book_first = Book.objects.first()
book_last = Book.objects.last()
print(book_first)
print(book_last)
print(connection.queries)
return HttpResponse('success')
执行的结果如下:
(书名:三国演义,页数:893,价格:129.0,打折:0.8,作者:罗贯中,47,312587329@qq.com,出版社: ->:清华大学出版社)
(书名:精彩极了,页数:333,价格:15.0,打折:3.5,作者:孤烟,20,7828749204@qq.com,出版社: ->:清华大学出版社)
[{'sql': 'SELECT @@SQL_AUTO_IS_NULL', 'time': '0.000'},
{'sql': 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED', '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` 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'},
{'sql': 'SELECT `author`.`id`, `author`.`name`, `author`.`age`, `author`.`email` FROM `author` WHERE `author`.`id` = 5 LIMIT 21', 'time': '0.016'},
{'sql': 'SELECT `publisher`.`id`, `publisher`.`name` FROM `publisher` WHERE `publisher`.`id` = 2 LIMIT 21', 'time': '0.094'},
{'sql': 'SELECT `author`.`id`, `author`.`name`, `author`.`age`, `author`.`email` FROM `author` WHERE `author`.`id` = 6 LIMIT 21', 'time': '0.000'},
{'sql': 'SELECT `publisher`.`id`, `publisher`.`name` FROM `publisher` WHERE `publisher`.`id` = 2 LIMIT 21', 'time': '0.000'}]
3. exists:判断某条数据是否存在,存在的话就返回True,不存在的话,就返回False。
django底层只查询一次的方式,示例代码如下:
def index(request):
# 只查询一次的判断方式
book = Book.objects.filter(name='西游记').exists()
print(book)
print(connection.queries)
return HttpResponse('success')
打印出结果如下:
True
[{'sql': 'SELECT @@SQL_AUTO_IS_NULL', 'time': '0.000'},
{'sql': 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED', 'time': '0.000'},
{'sql': "SELECT (1) AS `a` FROM `book` WHERE `book`.`name` = '西游记' LIMIT 1", 'time': '0.141'}]
使用count判断某条数据是否存在,示例代码如下:
def index(request):
book = Book.objects.filter(name='三国演义').count()
if book > 0:
print("你好这本书还有")
print(connection.queries)
return HttpResponse('success')
django底层执行的sql语句为:
你好这本书还有
[{'sql': 'SELECT @@SQL_AUTO_IS_NULL', 'time': '0.000'},
{'sql': 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED', 'time': '0.000'},
{'sql': "SELECT COUNT(*) AS `__count` FROM `book` WHERE `book`.`name` = '三国演义'", 'time': '0.000'}]
直接使用if语句进行判断QuerySet,相对来说,这种方法最慢,示例代码如下:
def index(request):
if Book.objects.filter(name='冠岩'):
print("存在")
else:
print("不好意思,这本书不存在")
print(connection.queries)
return HttpResponse('success')
django底层执行的sql语句为:
不好意思,这本书不存在
[{'sql': 'SELECT @@SQL_AUTO_IS_NULL', 'time': '0.000'},
{'sql': 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED', '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` WHERE `book`.`name` = '冠岩'", 'time': '0.000'}]
总结:判断某个条件的数据是否存在。如果要判断某个条件的元素是否存在,那么使用exists()要比使用count或者是直接使用QuerySet更加有效的多。
89.QuerySet API常用方法使用详解:count,first,last,aggregate,exists的更多相关文章
- 90.QuerySet API方法使用详解:distinct
distinct:去掉获取的数据中的重复数据,这个方法如果底层使用的数据库是mysql,那么就不能传递任何参数. (1)比如以下我们想要实现提取所有价格超过80元的图书,并且删掉那些重复的,那么可以使 ...
- 供应商API补充(详解EBS接口开发之供应商导入)(转)
原文地址 供应商导入的API补充(详解EBS接口开发之供应商导入) --供应商 --创建 AP_VENDOR_PUB_PKG.Create_Vendor ( p_api_version IN NUM ...
- mysqli一些常用方法及详解
mysqli一些常用方法及详解 1.die()函数:表示向用户输出引号中的内容后,程序终止运行,提示定制的出错信息 ex: $conn = mysqli_connect("localhost ...
- 如何设计提高服务API的安全性(二)API密钥方式详解
在上文已经讲述了基础介绍,这篇文章详细讲解API密钥方式. 利用何种加密方式呢? 经过上面加密算法的理解,单向加密不仅性能高,而且有压缩性,即长度一致,有效减少网络传输过程中的字节大小.适合我们这种调 ...
- SpringCloud微服务项目实战 - API网关Gateway详解实现
前面讲过zuul的网关实现,那为什么今天又要讲Spring Cloud Gateway呢?原因很简单.就是Spring Cloud已经放弃Netflix Zuul了.现在Spring Cloud中引用 ...
- Requests库常用方法及其详解
request库七个方法详解 1. request方法 所有方法的的基础方法,三个参数:method,url,**kwargs. 1.1 method:请求方式 method参数共有七个可选的值,分别 ...
- 转:基于科大讯飞语音API语音识别开发详解
原文来自于: http://www.52wulian.org/android_voice/ 最近项目需要用到android语音识别,立马就想到科大讯飞,结合官方实例及阅读API文档,初步的完成了And ...
- 百度地图API使用方法详解
最近做了个项目,其中项目中有个需求需要用到百度地图进行导航,通过查阅相关资料参考百度地图api完成了一个例子. API地址:http://developer.baidu.com/map/jsdemo. ...
- ASP.NET Web API 入门示例详解
REST服务已经成为最新的服务端开发趋势,ASP.NET Web API即为.NET平台的一种轻量级REST架构. ASP.NET Web API直接借鉴了ASP.NET MVC的设计,两者具有非常类 ...
随机推荐
- 洛谷 P2549 计算器写作文
题目传送门 解题思路: 背包,f[i]表示计算器位数为i时,可获得的最大分值. 本题与01背包不同的地方在于,物品的摆放顺序对答案是有影响的,例如两个字符串a,b,那么就会出现a+b和b+a两种情况( ...
- linux添加一个已经存在用户到一个用户组
在使用virtual-box的共享文件时,在虚拟机中共享文件的用户为root,用户组为vboxsf, 所以需要将自己添加到vboxsf这组当中去,一开始使用useradd老是失败,后来才查到要用use ...
- CSS - input 只显示下边框
CSS 样式 : border:none; border-bottom: 1px solid #000
- React+Flask打造前后端分离项目开发环境
目录 前言 Backend-Flask Frontend-React Done References 前言 新的一年,开始水第一篇技术文.碰巧最近React玩得多,撸一篇文章纪念一下开发环境的搭建.
- hdu1222Wolf and Rabbit (公约数的巧题)
一个很坑的问题,想到点子上很好解决,想不到的话头破也不一定能做出来. There is a hill with n holes around. The holes are signed from 0 ...
- python EasyUI + Django--整合 CSRF 防护去除
先来张完整图: 关于Django 得CSRF 中间件 防护 GET 是不做CSRF验证得 但POST 默认验证 $.cookie('csrftoken')) "v ...
- AVCodec 结构体
typedef struct AVCodec { // 标示Codec 的名字, 比如,"h264" "h263" 等. const char *name; / ...
- C++ STD Gems03
transform.for_each #include <iostream> #include <vector> #include <string> #includ ...
- UVA 11992 懒惰标记应用
这个题目要求和 还有 设置区间值 区间增值,明显要用线段树来 由于行数不超过20 而列数多达 10^5,所以对每一行建一棵线段树. 然后主要是在懒惰标记方面是难点 针对两种操作 分别设置 set 和 ...
- python print %s 号格式化输出
python %号格式化输出: 一种字符串格式化的语法, 基本用法是将值插入到%s占位符的字符串中. %s,表示格式化一个对象为字符 "%±(正负号表示)3(数字表示字符串的长度)s&quo ...