`
m4774411wang
  • 浏览: 108138 次
  • 性别: Icon_minigender_1
  • 来自: 南昌
社区版块
存档分类
最新评论

django model效率优化方法

阅读更多

django的model效率不是很高,特别是在做大量的数据库操作的时候,如果你只用django来开企业站或者外包项目的话,那可以小跳过下,而你恰巧是效率狂或者说是对程序的效率要求比较高的话,那就要注意下面的几个方法。

1. count()方法:
我们想用count方法来获取记录的条数可以采用下面的方法:

num = info.objects.filter('...').count()


我们来看下django model模块里面count方法是怎么写的?

def count(self):
"""
Performs a SELECT COUNT() and returns the number of records as an
integer.

If the QuerySet is already fully cached this simply returns the length
of the cached results set to avoid multiple SELECT COUNT(*) calls.
"""
if self._result_cache is not None and not self._iter:
return len(self._result_cache)

return self.query.get_count(using=self.db)


从上面的看来,djang model的count()要执行SELECT COUNT()语句,其实是查询了下数据库,这样如果记录比较多的情况下,
查询数据库的效率还是比较低的.
我的建议是:直接用len()来查看记录集的长度。

比如上面的写法我们可以用len()方法来修改。

info = info.objects.filter('...')
num = len(info)


2多用切片

比如我们要查询数据的话,如果你的数据量比较大的情况下,你没有限定要查询的范围,对系统的开销会非常的大,比如你要分页的显示
新闻数据,那你就要按照一页要显示多少数据,就读取多少数据,而不是一次起把数据全部给读出来,然后再根据限定的条件来显示的数据。
比如你要显示前10条的新闻的话按照下面的方法来做:
news = News.objects.all()[1:10]
而不是:
news = News.objects.all()
news = news[1:10]

因为
news = News.objects.all()
news = news[1:10]

你是把数据库里的数据全部给读出来,这样效率不是很高。

上面说的这几点是提高django model效率的几个小方法,希望大家平时在用django开发项目的时候要注意一些效率方面的东西。
下面关于django model的一篇文章:
django model的get和filter方法的区别

原创文章请注明转载自老王python,本文地址:http://www.cnpythoner.com/post/113.html

作者:老王@python python 教程
老王python,提供pythn相关的django 教程和python 下载,希望大家能够喜欢!

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics