使用pymysql插入语句时对execute与executemany两个方法进行测速
来源:互联网 发布:投资 知乎 编辑:程序博客网 时间:2024/04/28 12:27
这两天,在写一个python小程序的时候突然大发奇想了一下,觉得可以测试一下pymysql包里面的execute()与executemany()的速度,executemany()实质上就是将数组中的元素一个个取出来然后一条条的执行,可以查看executemany()的源码为:
def executemany(self, query, args): """Run several data against one query PyMySQL can execute bulkinsert for query like 'INSERT ... VALUES (%s)'. In other form of queries, just run :meth:`execute` many times. """ if not args: return m = RE_INSERT_VALUES.match(query) if m: q_values = m.group(1).rstrip() assert q_values[0] == '(' and q_values[-1] == ')' q_prefix = query[:m.start(1)] return self._do_execute_many(q_prefix, q_values, args, self.max_stmt_length, self._get_db().encoding) self.rowcount = sum(self.execute(query, arg) for arg in args) return self.rowcount这是pymysql中的源码,实际上执行的还是execute()方法。
然后再进行测试:
先测试executemany()方法的速度,以插入一万条数据来进行测试,源码为:
#!/usr/bin/python#coding:utf-8import pymysqlimport timeconn=pymysql.connect(host='localhost',user='root',password='XXXXX')pymysql.charset='gbk'cur=conn.cursor()conn.select_db('contacts')values=[]for i in range(10000): value=(str(i),'xiaxuan') values.append(value) now=time.strftime("%M:%S")try: cur.executemany("insert into xiaxuan values(%s,%s)",values) conn.commit()except Exception as err: print(err)finally: cur.close() conn.close()end=time.strftime("%M:%S")print(now+","+end)花费时间为:
四秒左右,然后进行execute()方法的测试,源码为:
#!/usr/bin/python#coding:utf-8import timeimport pymysqlconn=pymysql.connect(host='localhost',user='root',password='xxxxxx',db='contacts')cur=conn.cursor()values=[]for i in range(10000): value=(str(i),'xiaxuan') values.append(value)now=time.strftime("%M:%S")for val in values: cur.execute("insert into xiaxuan values(%s,%s)",val)conn.commit()end=time.strftime("%M:%S")print(now+","+end)花费的时间为:
花费的时间长一点,五秒左右,这个时候突然脑残了一下,把上面的程序中的conn.commit()写在了for循环里面,进行了测试,时间为:
时间为将近10分钟了,好吧我承认是先搞的这个测试,然后再做的上面哪一个测试,每一次都进行了提交,这个速度不是一般的慢啊。
总体上,executemany()方法比上execute()方法在插入一万条数据时快将近一秒钟,我又测了下10万条数据,
发现execute()为59秒,executemany()为51秒,也只是快了八秒左右,也就是在executemany()方法中没有进行多少性能的优化,
但是如果数据量很大,这个时间应该会节省很多。基本上,就是这样。
2 0
- 使用pymysql插入语句时对execute与executemany两个方法进行测速
- Python MySQLdb 循环插入execute与批量插入executemany性能分析
- pymysql之executemany()
- python中MySQLdb的execute和executemany的使用
- python中MySQLdb的execute和executemany的使用
- 使用shell脚本对IP进行批量测速(Ping)
- Django使用pymysql的方法
- 使用JdbcTemplate的execute()方法执行SQL语句
- 使用JdbcTemplate的execute()方法执行SQL语句
- 简单几步 对Liunx服务器的宽带进行测速
- 使用pandas对两个dataframe进行join
- 使用SQL语句进行数据比对
- (冲突)Python中使用pymysql插入中文数据问题
- pymysql插入时间
- 使用mybatis在oracle进行批量插入的insert语句
- 对两个变量的值进行互换的多种方法
- PHP PDO使用prepare()方法和execute()方法执行SQL语句
- 对Dictionary<TKey,TValue>进行插入与替换操作
- Eclipse 代码提示功能设置
- StringUtils中 isNotEmpty 和isNotBlank的区别
- 第十九周oj刷题:money problem
- 基于S3C2440的嵌入式Linux驱动——SPI子系统解读(四)
- ADT升级到23.0.2之后创建Android项目错误
- 使用pymysql插入语句时对execute与executemany两个方法进行测速
- uiimag圆形
- Android 隐性Intent的例子
- Factorial Trailing Zeroes , 172题,可能是我没读清楚,还报错。
- linux学习(15)文件系统的特殊观察与操作,空间浪费,parted 分区
- win7下安装vc++6.0和助手z
- iis配置PHP环境
- 浅谈JMS--(JMS 的简介)
- iOS开发UI篇—自定义瀑布流控件(接口设计)