Django中select
- Django中select 推荐度:
- 相关推荐
Django中select
0. 本文借助django-debug-toolbar来展现效果
django-debug-toolbar的安装
1. 介绍
select_related:
将会根据外键关系(注意: 仅限单对单和单对多关系),在执行查询语句的时候通过创建一条包含SQL inner join操作的SELECT语句来一次性获得主对象及相关对象的信息
prefetch_related
对于多对多字段,你不能使用select_related方法,这样做是为了避免对多对多字段执行JOIN操作从而造成最后的表非常大。
Django提供了prefect_related方法来解决这个问题。
prefect_related可用于多对多关系字段,也可用于反向外键关系(related_name)。
相同点:
都作用于queryset对象上面
注意点:
- 对与单对单或单对多外键ForeignKey字段,使用select_related方法
- 对于多对多字段和反向外键关系,使用prefetch_related方法
- 两种方法均支持双下划线指定需要查询的关联对象的字段名
- 使用Prefetch方法可以给prefetch_related方法额外添加额外条件和属性。
2. 使用
表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
2.1 原生的查询
2.1.1 代码
1 2 3 4 5 |
|
2.1.2 图示
2.1.3 查询解释
1.从图示我们可以看出来,一共进行13次查询,且有10次重复的!!!
原因是:当我们第一次查询时,返回的值,只有文章对象,对于标签以及用户,并没有查询,当前端界面需要这两个时,每循环一次,就会去数据库查询一次
2.为了避免重复查询,django提供select_related和prefetch_related方法来提升数据库查询效率,类似于SQL的JOIN方法。
3.效果就是当第一次查询时,进行连表,一次性把所有数据全部查询到
2.2 使用select_related
2.2.2 代码
1 2 3 4 5 6 7 8 9 10 |
|
2.2.3 图示
2.2.4 解释
可以看到现在只有三次查询,耗时大大减少
2.2.5 其他常用用法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
2.3. 使用prefetch_related方法
对于多对多字段,你不能使用select_related方法,这样做是为了避免对多对多字段执行JOIN操作从而造成最后的表非常大。
2.3.1 常用的案例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
- linux下 mysql的重启,启动,停止命令
- Window Server 2008虚拟机安装
- IIS攻击与日志
- 倾听:不只是听见
- mmap函数使用
- 设置开机自动启动chrome浏览器
- TreeSet集合如何保证元素唯一
- ext2ext3 结构分析
- TCPIP:认识TCP
- c语言上机试题库及答案,《C语言上机试题及答案》.doc
- PHP视频教程 全35讲rmvb格式下载
- 第三方联调
- java鬼混笔记:springboot 5、springboot的Scheduled定时器:fixedDelay和fixedRate区别
- [转载]interp1
- 前端必备:五大css自动化生成网站(稀有级别!)
- Yolov3,v4,v5区别
- Qt数据库:(三)利用QSqlQuery类执行SQL语句(一)