pymysql中 execute 和 executemany 性能对比

2024-05-12 01:48

本文主要是介绍pymysql中 execute 和 executemany 性能对比,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一.性能对比

今天突然想测试一下, pymysql中exectue ,和 executemany 插入数据库的效率,
看看区别大不大.
pymysql 中 execute 和 executemany 性能对比

users表结构

CREATE TABLE `users` (                                                            `id` int(11) NOT NULL AUTO_INCREMENT,`email` varchar(255) DEFAULT NULL,`password` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

import pymysql# 数据库配置信息
SHOUFUYOU_USER_PROFILE_CONFIG = {'host': 'xxx.xxx.xxx.xxx','port': xxxx,'user': 'xxxx','password': 'xxxxxxx','db': 'xxxxx','charset': 'utf8',
}def fn_timer(fn):"""计算 fn 的运算时间:param fn::return:"""@wraps(fn)def function_timer(*args, **kwargs):start = now()result = fn(*args, **kwargs)logger.info(f'{fn.__name__} total running time {now() - start} seconds')return resultreturn function_timer@fn_timer
def test_execute(connection, sql):rows_count = 0with connection.cursor(pymysql.cursors.DictCursor) as cursor:for i in range(1000):rows_count += cursor.execute(sql, ('frank@python.org', 'test' + str(i)))connection.commit()return rows_count@fn_timer
def test_execute_many(connection, sql):with connection.cursor(pymysql.cursors.DictCursor) as cursor:datas = [('webmaster@python.org', 'test' + str(i)) for i in range(1,1000)]rows_count = cursor.executemany(sql, datas)connection.commit()return rows_countif __name__ == '__main__':insert_sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)"connection = pymysql.connect(**SHOUFUYOU_USER_PROFILE_CONFIG)test_execute(connection, insert_sql)test_execute_many(connection, insert_sql)Connected to pydev debugger (build 173.4127.16)test_execute total running time 33.28491401672363 seconds
test_execute_many total running time 0.12204098701477051 seconds

测试结果如下:

数据测试方法耗时s测试数据量
execute方法3.287100
executemany方法0.0930100
execute方法33.2841000
executemany方法0.1221000
execute方法67.56122000
executemany方法0.193722000
二. 总结

可以看出明显的区别, 如果需要批量插入数据库,还是用 executemany方法 这个和execute 不是一个数量级.
如果只是插入比较少的数量量 用 exectue 比较好点.


分享快乐,留住感动.2018-08-13 08:58:30 –frank

这篇关于pymysql中 execute 和 executemany 性能对比的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/981269

相关文章

SpringBoot中六种批量更新Mysql的方式效率对比分析

《SpringBoot中六种批量更新Mysql的方式效率对比分析》文章比较了MySQL大数据量批量更新的多种方法,指出REPLACEINTO和ONDUPLICATEKEY效率最高但存在数据风险,MyB... 目录效率比较测试结构数据库初始化测试数据批量修改方案第一种 for第二种 case when第三种

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

关于MyISAM和InnoDB对比分析

《关于MyISAM和InnoDB对比分析》:本文主要介绍关于MyISAM和InnoDB对比分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录开篇:从交通规则看存储引擎选择理解存储引擎的基本概念技术原理对比1. 事务支持:ACID的守护者2. 锁机制:并发控制的艺

CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比

《CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比》CSS中的position属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布... css 中的 position 属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布局和层叠关

JVisualVM之Java性能监控与调优利器详解

《JVisualVM之Java性能监控与调优利器详解》本文将详细介绍JVisualVM的使用方法,并结合实际案例展示如何利用它进行性能调优,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录1. JVisualVM简介2. JVisualVM的安装与启动2.1 启动JVisualVM2

Java使用MethodHandle来替代反射,提高性能问题

《Java使用MethodHandle来替代反射,提高性能问题》:本文主要介绍Java使用MethodHandle来替代反射,提高性能问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录一、认识MethodHandle1、简介2、使用方式3、与反射的区别二、示例1、基本使用2、(重要)

Linux中的more 和 less区别对比分析

《Linux中的more和less区别对比分析》在Linux/Unix系统中,more和less都是用于分页查看文本文件的命令,但less是more的增强版,功能更强大,:本文主要介绍Linu... 目录1. 基础功能对比2. 常用操作对比less 的操作3. 实际使用示例4. 为什么推荐 less?5.

PyTorch高级特性与性能优化方式

《PyTorch高级特性与性能优化方式》:本文主要介绍PyTorch高级特性与性能优化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、自动化机制1.自动微分机制2.动态计算图二、性能优化1.内存管理2.GPU加速3.多GPU训练三、分布式训练1.分布式数据