orm的select_releated和prefetch_releated介绍
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了orm的select_releated和prefetch_releated介绍相关的知识,希望对你有一定的参考价值。
select_related:查询主动做连表
第一次写sql语句的时候,主动做连表,这样在查询的时候不用多次查询。这里你写几个表就关联几个表,如果后面select_related(‘ut‘,‘gt‘)就会关联2个表
q=models.Uinfo.objects.all().select_related(‘ut‘)
# select * from uinfo inner join utype on
但是连表操作的时候,性能会很差。如果公司的访问的量大,不会做feigionkey。好多公司不关心硬盘存储,而是关心到速度。
feiginkey:1,约束,2节省硬盘空间
prefetch_related
prefetch_related,不做连表,做多次查询
q = modele.uinfo.objects.all().prefetch_related()
#做2次sql查询,并且都是单表查询,第一次:select * from uino; 然后在Django内部会把这个用户类型全部拿到(并且还做了去重)ut_id = [2,4]开始查询:select * from utype where id in [2,4]
结果:
for row in q:
print(row.id,row.ut.title)#这次跨表查title的时候就不会再去查询数据库了。因为上面已经给查询了
以上是关于orm的select_releated和prefetch_releated介绍的主要内容,如果未能解决你的问题,请参考以下文章
ORM数据库查询优化only与defer(select_related与prefetch_related)
dajngo ORM查询中select_related的作用,博客主题的定制,从数据库中按照年月筛选时间
Django ORM select_related 渲染模板