提高django model效率的几个小方法

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

1.count()方法

我们想用count方法来获取记录的条数可以采用下面的方法:
num = info.objects.filter('...').count()

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

def count(self):

"""
Performs a SELECT COUNT() and returns the numberof records as an
integer.

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

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


从上面的看来,djangmodelcount()要执行SELECT COUNT()语句,其实是查询了下数据库,这样如果记录比较多的情况下,
查询数据库的效率还是比较高的.

比如我们可以用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,效率)