提高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()方法来求长度的话,使用的迭代,效果更低。
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转字典的几种方法
		平常的开发过程中不免遇到需要把model转成字典的需求,尤其是现在流行前后端分离架构,Json格式几乎成了前后端之间数据交换的标准,这种model转dict的需求就更多了,本文介绍几种日常使用的方法以 ... 
- [django]django model的查询和更新
		再分享Django系列的另外几篇文章: Django model select的各种用法详解:https://mp.weixin.qq.com/s/JVh4UnS2Tql9gUVaBSoGuA Dja ... 
- Django——Model
		一. ORM 在 MVC 或者说 MTV 设计模式中,模型(M)代表对数据库的操作.那么如何操作数据库呢? 我们可以在 Python 代码中嵌入 SQL 语句. 但是问题又来了,Python 怎么连接 ... 
- 【转】Django Model field reference学习总结
		Django Model field reference学习总结(一) 本文档包含所有字段选项(field options)的内部细节和Django已经提供的field types. Field 选项 ... 
- django model Meta选项
		可用的 Meta 选项 abstract Options.abstract 如果 abstract = True ,这个 model 就是一个 抽象基类 . app_label Options.app ... 
- Django model字段类型清单
		转载:<Django model字段类型清单> Django 通过 models 实现数据库的创建.修改.删除等操作,本文为模型中一般常用的类型的清单,便于查询和使用: AutoField ... 
- 提高SQL查询效率(SQL优化)
		要提高SQL查询效率where语句条件的先后次序应如何写 http://blog.csdn.net/sforiz/article/details/5345359 我们要做到不但会写SQL,还要做到 ... 
- 【Django】Django model与数据库操作对应关系(转)
		Django对数据库的操作分用到三个类:Manager.QuerySet.Model. Manager的主要功能定义表级方法(表级方法就是影响一条或多条记录的方法),我们可以以models.Manag ... 
- 提高php编程效率技巧
		提高php编程效率技巧 投稿:mrr 字体:[增加 减小] 类型:转载 时间:2015-08-13 php是全球范围应用范围最广的开发语言,php和linux.apache.mysql紧密结合,形 ... 
随机推荐
- http、https 等 常用默认端口号
			⑴. HTTP协议代理服务器常用端口号:80/8080/3128/8081/9080⑵. SOCKS代理协议服务器常用端口号:1080⑶. FTP(文件传输)协议代理服务器常用端口号:21⑷. Tel ... 
- bzoj 1014: 洛谷 P4036: [JSOI2008]火星人
			题目传送门:洛谷P4036. 题意简述: 有一个字符串,支持插入字符,修改字符. 每次需要查询两个后缀的LCP长度. 最终字符串长度\(\le 100,\!000\),修改和询问的总个数\(\le 1 ... 
- ubuntu下使用qemu模拟ARM(六)------驱动程序【转】
			转自:http://blog.csdn.net/rfidunion/article/details/54709843 驱动程序分为在ubuntu上运行和在ARM开发板上运行两种,我们分别来进行测试 1 ... 
- Linux中断处理驱动程序编写【转】
			转自:http://blog.163.com/baosongliang@126/blog/static/1949357020132585316912/ 本章节我们一起来探讨一下Linux中的中断 中断 ... 
- 在VS中让一个JS文件智能提示另一个JS文件中的成员2--具体引用
			我们知道,在html中,利用<script language="javascript" type="text/javascript" src=" ... 
- Unix IPC之基于共享内存的计数器
			目的 本文主要实现一个基于共享内存的计数器,通过父子进程对其访问. 本文程序需基于<<Unix网络编程-卷2>>的环境才能运行.程序中大写开头的函数为其小写同名函数的包裹函数, ... 
- yum安装Mysql-5.6
			MySQL yum库提供了一个简单的和方便的方法来安装和更新MySQL相关的软件包到最新版本. MySQL yum库文档说明:http://dev.mysql.com/doc/mysql-yum-re ... 
- Linux学习笔记之一及虚拟机的安装
			学习Linux基础入门 学习实验楼Linux基础入门--学习笔记系列博客 第一节 Linux系统简介 Linux就是一个操作系统,操作系统在计算机系统中包括系统调用和内核两层.在简单了解了Linux的 ... 
- OpenCV 颜色空间转换参数CV_BGR2GRAY改变
			OpenCV的颜色空间转换函数: C++: void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 ) 参数d ... 
- 2588: Count on a tree
			敢问和zwt的树有何区别..改了读入直接交..四百个人A,三百多个PE..于是果断贡献几发PE.. http://ideone.com/9XCg3D 
