注意:select_related() 仅作用于 ForeignKey 和 OneToOne,如果是 ManyToMany 字段,则需要用到下面的 prefetch_related() 函数。 prefetch_related() prefetch_related() 和 select_related() 作用类似,都是通过减少查询的次数,来实现查询优化。 但prefetch_related() 是针对 ManyToMany 的操作。 举个例子: fromdja...
原文链接:Django笔记十一之外键查询优化select_related和prefetch_related 本篇笔记目录如下: select_related prefetch_related 在介绍 select_related 和 prefetch_related 这两个函数前,我们先来看一个例子。 对于,Entry 和 Blog 这两个 model,前面介绍过,Blog 是 Entry 的外键,如下: class Blog(models.Model): na...
select_related是 Django ORM(对象关系映射)中的一个查询优化方法,主要用于减少数据库查询次数,特别是在处理一对一(OneToOneField)和多对一(ForeignKey)关系时。通过select_related,Django 可以在一次查询中获取所有相关联的对象,而不是分别查询每个对象。 基础概念 ...
值得一提的是,从Django 1.7开始,select_related()函数的作用方式改变了。在本例中,如果要同时获得张三的故乡和现居地的省份,在1.7以前你只能这样做: >>>zhangs = Person.objects.select_related('hometown__province','living__province').get(firstname=u"张",lastname=u"三")>>>zhangs.hometown.province>>...
在数据库有外键的时候,使用select_related() 和 prefetch_related() 可以很好的减少数据库请求次数,从而提高性能。 (1)select_related()当执行它的查询时它沿着外键关系查询关联的对象数据。它会生成一个复杂的查询并引起性能的消耗,但是在以后使用外键关系时将不需要数据库查询。
原文链接:Django笔记十一之外键查询优化select_related和prefetch_related 本篇笔记目录如下: select_related prefetch_related 在介绍 select_related 和 prefetch_related 这两个函数前,我们先来看一个例子。 对于,Entry 和 Blog 这两个 model,前面介绍过,Blog 是 Entry 的外键,如下: ...
为了验证 select_related() 确实会只查询一遍数据库,有两种方法: 一种是在数据库层面打印出来所有查询的 SQL语句, 另一种可以从侧面表示,那就是在系统层面打印出我们的查询条件转化的 SQL 语句。 比如: Entry.objects.select_related("blog").all().query.__str__() 可以看到会输出一个 关联了 Blog 表的 ...
1. Django ORM查询中select_related和prefetch_related的区别?? def select_related(self, *fields) 性能相关:表之间进行join连表操作,一次性获取关联的数据。 总结: 1. select_related主要针一对一和多对一关系进行优化。 2. select_related使用SQL的JOIN语句进行优化,通过减少SQL查询的次数来进行优化、提高性能。
select_related 当我们在使用的时候,如果有需要获取的外键数据,比如 Entry 关联的 Blog 数据,则可以将其字段名作为参数传入,这样在获取数据的时候就可以一次性将所有关联的 Blog 数据也取出来,而不用单独再去查询一遍数据库。 如下,批量操作: forentryinEntry.objects.select_related("blog").all():print(e.blog...
Django是一个基于Python的开源Web应用框架,它提供了一套完整的开发工具和库,用于快速构建高质量的Web应用程序。在Django中,select_related是一个非常有用的查询优化方法,它可以减少数据库查询的次数,提高查询性能。 select_related是Django ORM(对象关系映射)的一种查询方法,用于在查询数据库时,同时获取相关联的对象。