当前位置: 移动技术网 > IT编程>脚本编程>Python > 关于executemany()方法在不同OS和DB API下的不同表现的测试

关于executemany()方法在不同OS和DB API下的不同表现的测试

2019年01月10日  | 移动技术网IT编程  | 我要评论

品牌电视,龙图腾简谱,一家之鼠1国语

昨天在参照着网上写一段关于mysql连接池的配合gevent多线程调用的代码时遇到了一个问题,自己写的代码根本不能多线程执行,比单会话插入数据慢太多,直到今天早上才发现问题所在,把db api从mysqldb换为pymysql之后得到解决,因此测试了一下不同db api和os下executemany()的表现,先贴一下剪短的测试代码:

# -*- coding: utf-8 -*-
import mysqldb
import pymysql
import time
conn=pymysql.connect(host='192.168.1.174',port=3306,user='leo',passwd='leo',db='leo',charset='utf8')
conn.autocommit(true)
start_time=time.time()
with conn as cursor:
    data=((i,"messi%s"%i) for i in range(10000))
    cursor.executemany("insert into test values(%s,%s);",data)
    cursor.execute("select count(*) from test;")
    print(cursor.fetchall())
print("elapsed time: ",(time.time()-start_time))

以上一段代码在python2、3通用,通过开启general log来观察sql和事务状态。

使用不同版本的解释器执行测试的结果如下:

其他db api诸如sqlalchemy等未进行测试。

其实之前忘了在哪里也看到过在python3中mysqlclient、mysqldb之间的关系,但是如此混乱的版本表现确实很恶心。

此外,在python2中如果将executemany()封装入连接池类中,表现又有所不同,多条sql会在同一个会话中分为多个事务依次执行。

总结起来暂时就一句话:尽量使用python3的mysqldb module。

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网