defer(),only(): 这两个方法都会返回一个“QuerySet”对象,并且这个“QuerySet”中装的是模型,不像values()和values_list()是字典或元组。

1. defer:这个方法用来告诉“ORM”, 在查询某个模型的时候,过滤掉某个字段,注意:使用“defer”的字段,如果以后在使用这个字段,会重新发起一次请求,因此要谨慎操作。

示例代码如下:
  1. def index6(request):
  2. books = Book.objects.defer('name')
  3. for book in books:
  4. print("%s, %s" % (book.id, book.author))
  5. print(connection.queries)
  6. return HttpResponse("success")

django底层执行的sql语句为:

  1. [{'sql': 'SELECT @@SQL_AUTO_IS_NULL', 'time': '0.000'},
  2. {'sql': 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED', 'time': '0.000'},
  3. # 由下面的这条sql语句可以看出,在执行sql语句查找book的相关属性的时候,没有查找我们传递进defer()的属性字段name
  4. {'sql': 'SELECT `book`.`id`, `book`.`pages`, `book`.`price`, `book`.`rating`, `book`.`author_id`, `book`.`publisher_id`, `book`.`score` FROM `book`', 'time': '0.000'},
  5. {'sql': 'SELECT `author`.`id`, `author`.`name`, `author`.`age`, `author`.`email` FROM `author` WHERE `author`.`id` = 5 LIMIT 21', 'time': '0.000'},
  6. {'sql': 'SELECT `author`.`id`, `author`.`name`, `author`.`age`, `author`.`email` FROM `author` WHERE `author`.`id` = 1 LIMIT 21', 'time': '0.000'},
  7. {'sql': 'SELECT `author`.`id`, `author`.`name`, `author`.`age`, `author`.`email` FROM `author` WHERE `author`.`id` = 4 LIMIT 21', 'time': '0.000'},
  8. {'sql': 'SELECT `author`.`id`, `author`.`name`, `author`.`age`, `author`.`email` FROM `author` WHERE `author`.`id` = 3 LIMIT 21', 'time': '0.000'}]

2. only: 这个方法用来告诉“ORM”,在查询某个模型的时候,只提取某个字段。注意:没有加在“only”中的字段会被过滤掉,并且以后使用的话,就会再次重新发起一次请求,因此这个操作要谨慎。

示例代码如下:
  1. def index7(request):
  2. books = Book.objects.only('name')
  3. for book in books:
  4. print(book.name)
  5. print(connection.queries)
  6. return HttpResponse("Success")

django底层执行的sql语句为:

  1. [{'sql': 'SELECT @@SQL_AUTO_IS_NULL', 'time': '0.000'},
  2. {'sql': 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED', 'time': '0.000'},
  3. # 由下面这条查询语句可以看出,虽然只打印了book.name,但是在执行查询的语句的时候依旧查询了book.id, 并且在执行查询book.id之前并没有再次向数据库发起一次查询操作
  4. # 由此可以看出,数据库表中的id字段是不能进行操作的
  5. {'sql': 'SELECT `book`.`id`, `book`.`name` FROM `book`', 'time': '0.000'}]

85.常用的返回QuerySet对象的方法使用详解:defer,only的更多相关文章

  1. 82.常用的返回QuerySet对象的方法使用详解:all,select_related

    1. all: 返回这个ORM模型的QuerySet对象. articles = Article.objects.all() print(articles) 2.select_related: 查找数 ...

  2. 84.常用的返回QuerySet对象的方法使用详解:select_related, prefetch_related

    1.select_related: 只能用在一对多或者是一对一的关联模型之间,不能用在多对多或者是多对一的关联模型间,比如可以提前获取文章的作者,但是不能通过作者获取作者的文章,或者是通过某篇文章获取 ...

  3. 81.常用的返回QuerySet对象的方法使用详解:values和values_list

    values: 指定提取的数据库表中的字段值,如果不指定任何的字段名的话,默认情况下会提取所有的字段值.但是需要注意的是使用values返回的QuerySet对象中包括的是一个个的字典. 1.提取与A ...

  4. 79.常用的返回QuerySet对象的方法使用详解: filter, exclude,annotate

    返回新的QuerySet的常用方法: 1.filter: 将满足条件的数据提取出来,返回一个新的QuerySet 以下所使用的模型article,category,定义模型models.py文件中,示 ...

  5. 80.常用的返回QuerySet对象的方法使用详解:order_by

    order_by: 将模型生成的表按照某个字段进行排序,默认情况下,按照升序的顺序排序,如果想要按照降序的顺序排序可以在字段的前面加一个"-",加一个负号就可以进行反转. mode ...

  6. asp.net中C#对象与方法 属性详解

    C#对象与方法 一.相关概念: 1.对象:现实世界中的实体 2. 类:具有相似属性和方法的对象的集合 3.面向对象程序设计的特点:封装  继承 多态 二.类的定义与语法 1.定义类: 修饰符 类名称 ...

  7. js对象浅拷贝和深拷贝详解

    js对象浅拷贝和深拷贝详解 作者:i10630226 字体:[增加 减小] 类型:转载 时间:2016-09-05我要评论 这篇文章主要为大家详细介绍了JavaScript对象的浅拷贝和深拷贝代码,具 ...

  8. 2020你还不会Java8新特性?方法引用详解及Stream 流介绍和操作方式详解(三)

    方法引用详解 方法引用: method reference 方法引用实际上是Lambda表达式的一种语法糖 我们可以将方法引用看作是一个「函数指针」,function pointer 方法引用共分为4 ...

  9. Underscore _.template 方法使用详解

    为什么用「void 0」代替「undefined」 undefined 并不是保留词(reserved word),它只是全局对象的一个属性,在低版本 IE 中能被重写. 事实上,undefined ...

随机推荐

  1. mysql基本知识的总结

    Mysql基本sql知识 Navicat快捷方式: 选中当前行 在行尾:shift+home 在行首:shift+end 执行当前行:ctrl+shift+R 复制当前行:ctrl+D 显示所有数据库 ...

  2. 071-PHP数组合并

    <?php $arr1=array('a','b','c'); //定义一个数组 echo '数组$arr1的信息:<br />'; print_r($arr1); //输出数组信息 ...

  3. 057-while循环

    <?php $x=1; //初始化变量 while($x<=5){ //执行while循环 echo "$x<br />"; $x++; } ?>

  4. 好记性不如烂笔头--shell参数及shell判断if系列

    $0 当前脚本的文件名$n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数是$1,第二个参数是$2$# 传递给脚本或函数的参数个数$* 传递给脚本或函数的所有参数$@ 传递给 ...

  5. VM ESXi虚拟化使用学习笔记

    由于疫情原因,没有条件介绍安装部分的内容,也没有安装部分内容的相关截图,所以安装部分可以选择网上资料.但是只要熟练安装CentOS系统的,基本安装ESXi一看就会,设置主机地址方面有一定图形化界面,比 ...

  6. 面向对象-main函数

    面向对象-main函数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   一.编写main函数测试代码 /** * * @author 尹正杰 * */ public class ...

  7. 基于UWB技术的DW1000芯片简单解析

    近些年来随着物联网和机器人技术的大发展,精确定位技术的热度也随之攀升.目前精确定位的技术有很多,如基于wifi.RFID.zigbee.超声波.UWB等技术都可以实现精准定位.由于技术的不同,精度也不 ...

  8. Day3-T2

    原题目 奶牛Bessie的电脑总是无缘无故地被 FJ 关掉,奶牛 Bessie 非常苦恼,也非常生气.FJ 却发现了 一个很神奇的规律(别问是怎么知道的),发现 Bessie 每吃一次草,她的生气值会 ...

  9. Day2-T3

    原题目 Describe:质数问题 code: #pragma GCC optimize(2) #include<bits/stdc++.h> #define KKK 1200 using ...

  10. CSS position定位属性

    css中的position属性是用于设置元素位置的定位方式 它有以下几种取值: static:默认定位方式,子容器在父容器中按照默认顺序进行摆放 absolute:绝对定位,元素不占据父容器空间,相当 ...