82.常用的返回QuerySet对象的方法使用详解:all,select_related
1. all: 返回这个ORM模型的QuerySet对象。
articles = Article.objects.all()
print(articles)
2.select_related: 查找数据的时候,可以一次性的将相关联的其他的表的数据都提取出来,这样可以在以后访问相关联的表的数据的时候,不用再次查找数据库,可以节省一些开销,示例代码如下:
from django.http import HttpResponse
from .models import Article, Category
def index(request):
# 使用select_related()方法提取相关联的数据表中的数据,会暂时的存放在内存中,
# 再次查看的时候就不用再次访问数据库表了,可以大大提高访问的效率
articles = Article.objects.select_related('category')
for article in articles:
print(article.category.name)
print(connection.queries)
return HttpResponse("success!")
打印出结果如下:
最新文章
最新文章
最热文章
高评分文章
[{'sql': 'SELECT @@SQL_AUTO_IS_NULL', 'time': '0.000'}, {'sql': 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED', 'time': '0.000'}, {'sql': 'SELECT article
.id
, article
.title
, article
.content
, article
.category_id
, article
.create_time
, category
.id
, category
.name
, category
.rating
FROM article
LEFT OUTER JOIN category
ON (article
.category_id
= category
.id
)', 'time': '0.000'}]
同样也可以不放在内存中,但是这样django底层会执行更多的sql语句进行查询,示例代码如下:
from django.http import HttpResponse
from .models import Article, Category
def index(request):
articles = Article.objects.all()
for article in articles:
print(article.category.name)
print(connection.queries)
return HttpResponse("success!")
返回的结果如下:
最新文章
最热文章
高评分文章
最新文章
[{'sql': 'SELECT @@SQL_AUTO_IS_NULL', 'time': '0.000'}, {'sql': 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED', 'time': '0.000'}, {'sql': 'SELECT article
.id
, article
.title
, article
.content
, article
.category_id
, article
.create_time
FROM article
', 'time': '0.000'}, {'sql': 'SELECT category
.id
, category
.name
, category
.rating
FROM category
WHERE category
.id
= 1 LIMIT 21', 'time': '0.000'}, {'sql': 'SELECT category
.id
, category
.name
, category
.rating
FROM category
WHERE category
.id
= 2 LIMIT 21', 'time': '0.000'}, {'sql': 'SELECT category
.id
, category
.name
, category
.rating
FROM category
WHERE category
.id
= 3 LIMIT 21', 'time': '0.000'}, {'sql': 'SELECT category
.id
, category
.name
, category
.rating
FROM category
WHERE category
.id
= 1 LIMIT 21', 'time': '0.000'}]
由执行的sql语句可以看出,执行all()方法的sql语句会执行更多条,因此会降低查询的效率,所以可以在数据量不太大,并且查询的次数较多的时候,可以使用select_related方法将相关联的数据表中的数据提取到内存中,以便之后加快查询的效率。
注意:这个方法只能用在定义了外键的字段上,也可以说是用在外键的关联对象(表)上,对于多对多,或者是多对一的情况,不能使用select_related()方法。而应该使用“prefetch_related”来实现。
82.常用的返回QuerySet对象的方法使用详解:all,select_related的更多相关文章
- 84.常用的返回QuerySet对象的方法使用详解:select_related, prefetch_related
1.select_related: 只能用在一对多或者是一对一的关联模型之间,不能用在多对多或者是多对一的关联模型间,比如可以提前获取文章的作者,但是不能通过作者获取作者的文章,或者是通过某篇文章获取 ...
- 85.常用的返回QuerySet对象的方法使用详解:defer,only
defer(),only(): 这两个方法都会返回一个"QuerySet"对象,并且这个"QuerySet"中装的是模型,不像values()和values_l ...
- 81.常用的返回QuerySet对象的方法使用详解:values和values_list
values: 指定提取的数据库表中的字段值,如果不指定任何的字段名的话,默认情况下会提取所有的字段值.但是需要注意的是使用values返回的QuerySet对象中包括的是一个个的字典. 1.提取与A ...
- 79.常用的返回QuerySet对象的方法使用详解: filter, exclude,annotate
返回新的QuerySet的常用方法: 1.filter: 将满足条件的数据提取出来,返回一个新的QuerySet 以下所使用的模型article,category,定义模型models.py文件中,示 ...
- 80.常用的返回QuerySet对象的方法使用详解:order_by
order_by: 将模型生成的表按照某个字段进行排序,默认情况下,按照升序的顺序排序,如果想要按照降序的顺序排序可以在字段的前面加一个"-",加一个负号就可以进行反转. mode ...
- asp.net中C#对象与方法 属性详解
C#对象与方法 一.相关概念: 1.对象:现实世界中的实体 2. 类:具有相似属性和方法的对象的集合 3.面向对象程序设计的特点:封装 继承 多态 二.类的定义与语法 1.定义类: 修饰符 类名称 ...
- js对象浅拷贝和深拷贝详解
js对象浅拷贝和深拷贝详解 作者:i10630226 字体:[增加 减小] 类型:转载 时间:2016-09-05我要评论 这篇文章主要为大家详细介绍了JavaScript对象的浅拷贝和深拷贝代码,具 ...
- 2020你还不会Java8新特性?方法引用详解及Stream 流介绍和操作方式详解(三)
方法引用详解 方法引用: method reference 方法引用实际上是Lambda表达式的一种语法糖 我们可以将方法引用看作是一个「函数指针」,function pointer 方法引用共分为4 ...
- Underscore _.template 方法使用详解
为什么用「void 0」代替「undefined」 undefined 并不是保留词(reserved word),它只是全局对象的一个属性,在低版本 IE 中能被重写. 事实上,undefined ...
随机推荐
- App与Js交互(三)Android、iOS通用解决方案推荐
https://www.jianshu.com/p/6224f429ce87 window.navigator.userAgent用来区分设备和浏览器 https://blog.csdn.net/li ...
- A convenient way to recognize and handwrite multidimensional arrays in Numpy
As a new learner of Numpy, it is very common to be confused by the form of array, braces nested in b ...
- 洛谷 P3205 [HNOI2010]合唱队(区间dp)
传送门 解题思路 观察队形的组成方式可以得出,最后一名加入区间i...j的人要么是在i位置上,要么是在j位置上,所以我们可以用dp[i][j][0]表示区间i...j最后一个加入的人站在i位置上的方案 ...
- mapper语句的一些问题,union连表查询和mapper中根据条件不同采用不同语句的查询问题
根据业务要求,不同表查出来的内容天需要一起展示出来,并且还有分页之类的,不同表查询字段也不完全相同,这样就有一个问题,不同表如何接合在一起,不同字段怎么办? 这个问题就需要用到union联合查询,并将 ...
- STM32初始
.安装软件.驱动 JLINK驱动.PL2303驱动.MDK4.7(装完破解) .源码编译完要用到的工具 烧录工具MCUISP.串口调试助手 .KEIL建工程模板(2种) (1)寄存器开发:工程文件夹下 ...
- 六十九、SAP中内表插入的三种方法之三,INSERT的使用,用于指定位置插入
一.代码如下 二.需要注意的时候,如果内表和工作区同名,这可以用隐式插入,不需要什么工作区INTO到什么表,INDEX为位置,效果图如下:
- 三十五、在SAP中定义选择屏幕,设置选择范围
一.代码如下,有2个地方需要注意,一个是SELECT-OPTIONS,还有一个是IN的使用 二.我们定义一下选择文本 三.我们运行程序 四.输出 五.当然,选择的时候,我们也可以用其他的方式,如下图
- 167-PHP 文本分割函数str_split(二)
<?php $str='PHP is a very good programming language'; //定义一个字符串 $arr=explode(' ',$str,-3); //使用空格 ...
- kafka cmd with ssl
set PATH=C:\Program Files\Java\jdk1.8.0_201\bin;@call kafka-consumer-groups.bat --bootstrap-server l ...
- BurpSuite详解
转载自:http://www.nxadmin.com/tools/689.html 本文由阿德马翻译自国外网站,请尊重劳动成果,转载注明出处 Burp Suite是Web应用程序测试的最佳工具之一,其 ...