ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

pymysql中不同插入操作性能比较

2021-11-19 20:03:16  阅读:153  来源: 互联网

标签:execute 10000 性能 t2 pymysql 插入 time commit con


我们测试下3种插入操作方式的性能情况(以10000次为例):

  • 1、每条数据都进行execute和commit
  • 2、多次执行exectue,最后commit
  • 3、使用executemany执行1次,然后commit1次

示例:

# coding:utf-8

import time
import pymysql

from settings import *

con = pymysql.Connect(host=MYSQL_HOST, username=MYSQL_USER, password=MYSQL_PASSWORD, port=MYSQL_PORT,
                 database=MYSQL_DATABASE)
cur = con.cursor()
sql = 'insert into test_table(test_field) values(%s);'

# 1、执行和提交10000次
def test1():
    t1 = time.time()
    for i in range(10000):
        try:
            cur.execute(sql,[i])
            con.commit()
        except Exception as e:
            print(e)
            con.rollback()
    t2 = time.time()
    print('使用10000次execute和commit耗时:%.2f秒'%(t2-t1))

# 2、执行10000次,提交1次
def test2():
    t1 = time.time()
    try:
        for i in range(10000):
            cur.execute(sql,[i])
        con.commit()
    except Exception as e:
        print(e)
        con.rollback()
    t2 = time.time()
    print('使用execute执行10000次,commit1次耗时:%.2f秒'%(t2-t1))

# 3、执行executemany1次,提交1次
def test3():
    t1 = time.time()
    args_list = []
    for i in range(10000):
        args_list.append(i)
    try:
        cur.executemany(sql,args_list)
        con.commit()
    except Exception as e:
        print(e)
        con.rollback()
    t2 = time.time()
    print('使用executemany执行1次,commit1次耗时:%.2f秒'%(t2-t1))

def main():
    test1()
    test2()
    test3()

if __name__ == '__main__':
    main()

结果:

使用10000次execute和commit耗时:12.96秒
使用execute执行10000次,commit1次耗时:0.94秒
使用executemany执行1次,commit1次耗时:0.05秒

很明显,1次缓冲多条命令,效率会高于分次提交,同时executemany方法会进一步提升效率

标签:execute,10000,性能,t2,pymysql,插入,time,commit,con
来源: https://www.cnblogs.com/eliwang/p/15578914.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有