python环境测试MySQLdb、DBUtil、sqlobject性能

python环境测试MySQLdb、DBUtil、sqlobject性能

首先介绍下MySQLdb、DBUtil、sqlobject:

(1)MySQLdb 是用于Python连接Mysql数据库的接口,它实现了 Python 数据库
API 规范 V2.0,基于 MySQL C API 上建立的。除了MySQLdb外,python还可以通过oursql, PyMySQL, myconnpy等模块实现MySQL数据库操作;

(2)DBUtil中提供了几种连接池,用以提高数据库的访问性能,例如PooledDB,PesistentDB等

(3)sqlobject可以实现数据库ORM映射的第三方模块,可以以对象、实例的方式轻松操作数据库中记录。

为测试这三者的性能,简单做一个例子:50个并发访问4000条记录的单表,数据库记录如下:

测试代码如下:

1、MySQLdb的代码如下,其中在connDB()中把连接池相关代码暂时做了一个注释,去掉这个注释既可以使用连接池来创建数据库连接:

(1)DBOperator.py

01 import MySQLdb
02 from stockmining.stocks.setting import LoggerFactory
03 import connectionpool
04  
05 class DBOperator(object):
06      
07     def __init__(self):
08         self.logger = LoggerFactory.getLogger(‘DBOperator‘)
09         self.conn = None
10                
11     def connDB(self):
12         self.conn=MySQLdb.connect(host="127.0.0.1",user="root",passwd="root",db="pystock",port=3307,charset="utf8")  
13         #当需要使用连接池的时候开启
14         #self.conn=connectionpool.pool.connection()
15         return self.conn
16  
17     def closeDB(self):
18         if(self.conn != None):
19             self.conn.close()  
20    
21     def execute(self, sql):
22         try:
23             if(self.conn != None):
24                 cursor = self.conn.cursor()
25             else:
26                 raise MySQLdb.Error(‘No connection‘)
27              
28             = cursor.execute(sql)
29             return n
30         except MySQLdb.Error,e:
31             self.logger.error("Mysql Error %d: %s" % (e.args[0], e.args[1]))
32   
33     def findBySQL(self, sql):
34         try:
35             if(self.conn != None):
36                 cursor = self.conn.cursor()
37             else:
38                 raise MySQLdb.Error(‘No connection‘)
39              
40             cursor.execute(sql)
41             rows = cursor.fetchall() 
42             return rows
43         except MySQLdb.Error,e:
44             self.logger.error("Mysql Error %d: %s" % (e.args[0], e.args[1]))

(2)测试代码testMysql.py,做了50个并发,对获取到的数据库记录做了个简单遍历。

01 import threading  
02 import time  
03 import DBOperator
04  
05 def run(): 
06     operator = DBOperator()
07     operator.connDB()
08     starttime = time.time()
09     sql = "select * from stock_cash_tencent"
10     peeps = operator.findBySQL(sql)
11     for in peeps: pass  
12     operator.closeDB()
13     endtime = time.time()
14     diff =  (endtime - starttime)*1000
15     print diff
16      
17 def test():  
18     for in range(50):  
19         threading.Thread(target = run).start() 
20         time.sleep(1)
21      
22 if __name__ == ‘__main__‘:  
23      test()

2、连接池相关代码:

(1)connectionpool.py

01 from DBUtils import PooledDB
02 import MySQLdb
03 import string
04  
05 maxconn = 30            #最大连接数
06 mincached = 10           #最小空闲连接
07 maxcached = 20          #最大空闲连接
08 maxshared = 30          #最大共享连接
09 connstring="root#root#127.0.0.1#3307#pystock#utf8" #数据库地址
10 dbtype = "mysql"  
11  
12 def createConnectionPool(connstring, dbtype):
13     db_conn = connstring.split("#");
14     if dbtype==‘mysql‘:
15         try:
16             pool = PooledDB.PooledDB(MySQLdb, user=db_conn[0],passwd=db_conn[1],host=db_conn[2],port=string.atoi(db_conn[3]),db=db_conn[4],charset=db_conn[5], mincached=mincached,maxcached=maxcached,maxshared=maxshared,maxconnections=maxconn)
17             return pool
18         except Exception, e:
19             raise Exception,‘conn datasource Excepts,%s!!!(%s).‘%(db_conn[2],str(e))
20             return None
21  
22  
23 pool = createConnectionPool(connstring, dbtype)

3、sqlobject相关代码

(1)connection.py

1 from sqlobject.mysql import builder
2  
3 conn = builder()(user=‘root‘, password=‘root‘,
4                  host=‘127.0.0.1‘, db=‘pystock‘, port=3307, charset=‘utf8‘)

(2)StockCashTencent.py对应到数据库中的表,50个并发并作了一个简单的遍历。(实际上,如果不做遍历,只做count()计算,sqlobject性能是相当高的。)

01 import sqlobject
02 import time
03 from connection import conn
04 import threading
05  
06 class StockCashTencent(sqlobject.SQLObject):
07     _connection = conn
08      
09     code = sqlobject.StringCol()
10     name = sqlobject.StringCol()
11     date = sqlobject.StringCol()
12     main_in_cash = sqlobject.FloatCol()   
13     main_out_cash = sqlobject.FloatCol()  
14     main_net_cash = sqlobject.FloatCol()
15     main_net_rate= sqlobject.FloatCol()
16     private_in_cash= sqlobject.FloatCol()
17     private_out_cash= sqlobject.FloatCol()
18     private_net_cash= sqlobject.FloatCol()
19     private_net_rate= sqlobject.FloatCol()
20     total_cash= sqlobject.FloatCol()
21  
22 def test():
23     starttime = time.time()
24     query  = StockCashTencent.select(True)
25     for result in query: pass
26     endtime = time.time()
27     diff =  (endtime - starttime)*1000
28     print diff
29          
30 if __name__ == ‘__main__‘:  
31    for in range(50):  
32         threading.Thread(target = test).start()   
33         time.sleep(1)

测试结果如下:

MySQLdb平均(毫秒) 99.63999271
DBUtil平均(毫秒) 97.07998276
sqlobject平均(毫秒) 343.2999897

结论:其实就测试数据而言,MySQLdb单连接和DBUtil连接池的性能并没有很大的区别(100个并发下也相差无几),相反sqlobject虽然具有的编程上的便利性,但是却带来性能上的巨大不足,在实际中使用哪个模块就要斟酌而定了。

时间: 2024-10-24 22:50:08

python环境测试MySQLdb、DBUtil、sqlobject性能的相关文章

windows搭建python环境之MySQLdb

windows 搭建python环境之MySQLdb 一.安装setuptools 下载 ez_setup.py 见附件,官方下载 d:D:\>ez_setup.py 二.安装 MySQLdb 直接下载exe直接安装,编代码编译也可以,除非你有很多时间. https://pypi.python.org/pypi/MySQL-python/1.2.4 三.测试模块 C:\Users\serven>PYTHONPython 2.7.11 (v2.7.11:6d1b6a68f775, Dec  5

App的网络环境测试和性能优化

1. 网络环境测试一般是先用网络损伤模拟仪或mock工具模拟常见的七种损伤和5种网络环境,然后再国内外城市采样的方式(带宽和延时)组合测试生成报告, 下面是一些统计图 2. 采样点的选择一般都是根据自己server收集的用户信息.如果新app就要参考近品/竞品或第三方的统计数据拍脑袋 3. 从测试的角度,应该建立实时监控的web portal.其实测试的目的除了保证产品发布的质量.更重要的是为优化提供依据,所以report最后一部分都是issue list 和optmize advice,当然测

老司机带你用vagrant打造一站式python开发测试环境

前言 作为一个学习和使用Python的老司机,好像应该经常总结一点东西的,让新司机尽快上路,少走弯路,然后大家一起愉快的玩耍. 今天,咱们就使用vagrant配合xshell打造一站式Python开发测试环境. 目的 让你在Windows下,也能愉快的使用Linux环境调试Python. 适用人群:Python新手和希望在Windows下使用Linux环境调试Python的小伙伴们. 难度:super easy 最终效果:只用一个xshell终端(其他类似的都可以),启动ubuntu虚拟机,py

(2)在Windows 7 x64端设置Python环境

因Python语言在大数据处理,以及科学计算方向的雄起,另Django等Web框架已经在业界获得共识多年,所以本文拟搭建Python的学习开发环境.由于本人的笔记本及实验室主机系统环境以Windows为主,所以本文意在搭建Windows环境下的Python开发环境. 本文的内容主要分为以下几个部分:1.寻找合适的IDE:2.搭建Django:3.搭建Numpy+matplotlib+Scipy环境 *************************************************

1.python环境搭建(python2.7.10+ PyCharm3.4.1+selenium)

1.下载软件并配置     (1) 需要软件:python2.7.10 和 PyCharm3.4.1,地址略,百度一大把的 (2) 安装python2.7.10 下一步一直下去,直到安装成功,我这里放在D:\Program Files\Python27 (3) 安装 PyCharm3.4.1 下一步一直下去,直到安装成功,打开后如下图: --点击configure --点击settings 点击settings,进入下图: 找到本地安装的python2.7.10中的python.exe后点击ok

【转】Windows 64bit下Python环境配置与集成IDE PyCharm

本篇博客主要讲述Windows下Python环境的搭建(十分感谢原作者!!) 1. Python基本环境安装: 在网站Python官网 中下载Windows版本的Python安装包,双击下载下来的安装包,安装过程中要选中pip和Add python.exe to Path两个选项,在安装按成之后Win+R进入命令行输入Python,得到如下结果说明安装完成 要退出命令行下的输入模式按Ctrl+Z之后按回车Enter按键即可退出 2. Windows下Python基本依赖库的安装 因为在最初的Py

Selenium WebDriver + Python 环境配置

1.   下载必要工具及安装包 1.1.[Python开发环境] 下载并安装Python 2.7.x版本(当前支持2.x版本,不要下载最新的3.X的版本因为python3并非完全兼容python2) 下载地址:https://www.python.org/downloads/ 1.2.[python 的安装包管理工具]Pip pip 是python 软件包的安装和管理工具,有了这个工具,我们只需要一个命令就可以轻松的python 的任意类库. 下载地址: https://pypi.python.

机器学习实战__安装python环境

环境:win7 64位系统 第一步:安装python 1.下载python2.7.3 64位 msi 版本(这里选择了很多2.7的其他更高版本导致安装setuptools失败,也不知道是什么原因,暂时不管,总之选择这个版本就可以了) 2.安装python,全部next点下去. 3.配置一下环境变量,我是默认将C:\Python添加path即可 第二步:安装setuptools和pip(可以很方便得安装python里面的第三方包和模块) 1.获取两个文件,分别是ez_setup.py和get-pi

linux部署python和加入mysqldb、easy_install

一.安装easy_install 参考文章: http://www.cnblogs.com/huangjacky/archive/2012/03/28/2421866.html 安装 wget https://bootstrap.pypa.io/ez_setup.py -O - | python 安装到了默认的python2.6.6版本里面[如果是2.7.5的版本呢,参考最下面的参考文章] 测试是否安装成功easy_install easy_install Twisted 二.python进入安