Django考虑到了这一点,所以提供select_related和prefetch_related方法来提升数据库查询效率,类似于SQL的JOIN方法。 select_related方法 select_related将会根据外键关系(注意: 仅限单对单和单对多关系),在执行查询语句的时候通过创建一条包含SQL inner join操作的SELECT语句来一次性获得主对象及相关对象的信息。现在我们对...
select_related括号内只能接收外键字段(一对多 一对一) 自动连表 得出的数据对象在点击表中数据的时候都不会再走数据库查询 """ forobjinres: print(obj.publish.name) """ prefetch_related底层其实是子查询 将查询之后的结果也一次性封装到数据对象中 用户在使用的时候是感觉不出来的 """ res = models.Book...
1. select_related主要针一对一和多对一关系进行优化。 2. select_related使用SQL的JOIN语句进行优化,通过减少SQL查询的次数来进行优化、提高性能。 def prefetch_related(self, *lookups) 性能相关:多表连表操作时速度会慢,使用其执行多次SQL查询在Python代码中实现连表操作。 总结: 1. 对于多对多字段(ManyToManyF...
实际上,related_query_name在prefetch_related、select_related等查询优化方法中扮演了指定关联查询名称的角色。如果我们在ForeignKey字段中添加了related_query_name='profile_set'(Django默认会使用<modelname>_set作为查询名称,除非另有指定),则查询将变为: users = User.objects.all().prefetch_related('profile_set...
自关联:related_name必须设置,方便反向查询 # 互粉 Select_related: 性能相关 使用select_related, 则可以一次性查找: 循环中的row.pk,username和row.tk.username都不用每次查找一次 extra only与defer: Only与values的区别。Only返回对象,当通过这些only出的对象查询先前没有指定的属性(username,id)时,会再进行数据...
<22>select_related() 附带查询关联对象 <23>prefetch_related() 预先查询 <24>extra() 附加SQL查询 <25>defer() 不加载指定字段 <26>only() 只加载指定的字段 <27>using() 选择数据库 <28>select_for_update() 锁住选择的对象,直到事务结束。
1. select_related主要针一对一和多对一关系进行优化。 2. select_related使用SQL的JOIN语句进行优化,通过减少SQL查询的次数来进行优化、提高性能。 def prefetch_related(self, *lookups) 性能相关:多表连表操作时速度会慢,使用其执行多次SQL查询在Python代码中实现连表操作。
Filters,可以根据给定参数缩小查询结果量。在 SQL 的层面上, QuerySet 对应SELECT 语句,而*filters*对应类似 WHERE 或LIMIT 的限制子句。 你能通过模型的 Manager 获取QuerySet。每个模型至少有一个 Manager,默认名称是 objects。像这样直接通过模型类使用它: >>> Blog.objects <django.db.models.manager.Manager ...
而使用select_related()方法之后,我们就只需要一条数据库查询语句: 代码语言:javascript 复制 # 查询一次数据库.e=Entry.objects.select_related('blog').get(id=5)# 不再去数据库进行查询,e里面已经填充了Blog对象的数据 b=e.blog 类似的查询集方法还有一个prefetch_related(),它执行的是反向的查找。有兴趣可...