python-Django框架,分页以及数据库执行情况详细探究

1、django框架在list页面时候查询效率问题

django的list写法一般是先

list=xxx.objects.all()或者xxx.objects.filter(Q)

再将list,放进django自带分页对象

Paginator(list, limit),进行分页操作

刚开始以为先all,会将数据表所有记录全部select出来,再放进Paginator进行分页,效率会非常低。

查了网上,网上也有很多教程教你自己用python切片写高效分页。

其实全部对django一知半解搞错了。

正确的是:

django的queryset是懒查询,最后返回页面的时候才会真正的去执行sql查询,在一定要objects.all()的时候。django

默认会带上select...limit 21。除非代码里写死了取出all,再把all拿来复制,遍历操作,这样会执行全表查询。

其他时候select永远会加上limit分片或limit 21。所以完全不用担心和考虑django的列表页面的效率。django很成熟了,不 会范这种错误。

为了验证这个问题,我开启了mysql的sql日志实时输出。

详细方法,可参照其他大神的办法:http://blog.csdn.net/u014180504/article/details/73826679

执行结果:

在执行all的时候:

永远会带21

最厉害的是django里面判断你要真的取出数据来操作时候会真的全表查,如果只是取出queryset赋值,在数据最后返回页面才会

执行分片,或者limit 21。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值