python - ORM 查询

本文深入探讨了Django ORM中三种不同的查询方式:普通查询、seleted_related和prefetch_related,对比了它们的性能差异及适用场景。普通查询效率较低,每次查询都会检索所有相关数据;seleted_related进行一次连表查询,适用于少量关联表的情况;prefetch_related则通过两次单表查询提高效率,特别适合关联表较多的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 正常查询:    ## 效率低,因为每次查询都是查询表和关联表的所有数据
ret = User.objects.all()
for item in ret:
    print(item.name,item.dp.title)

2. seleted_related -- 主动做连表查询 (1次连表)
ret = User.objects.all().seleted_related('dp')
for item in ret:
    print(item.name,item.dp.title)
问题:如果连表过多,性能只会越来越差
3. prefetch_related -- 2次单表查询 # 第一次 : select * from user; # 通过 python 代码获取:dp_id = [1,2]; # 第二次 : select * from depart where id in dp_id; ret = User.objects.all().prefetch_related('dp') for item in ret: print(item.name,item.dp.title)

 

转载于:https://www.cnblogs.com/chaoqi/p/10446710.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值