orm的select_releated和prefetch_releated介绍

本文介绍了Django ORM中两种连表查询方式:select_related 和 prefetch_related 的使用方法及性能对比。select_related 主动进行连表查询,适用于查询结果需要多个表数据的情况;prefetch_related 则通过多次查询来获取数据,适用于查询结果包含大量数据的情况。

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的时候就不会再去查询数据库了。因为上面已经给查询了

转载于:https://blog.51cto.com/sgk2011/2069407

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值