pymysql中 execute 和 executemany 性能对比,以及与原生SQL 相比如何

2023-11-13

今天在mysql中插入大批量数据时,突然想起pymysql 还有executemany 方法,那么这两个方法到底谁快?快多少?

测试环境

  • python3
  • mysql
  • pymysql

老规矩,先上测试代码:

class IN_sql():
    def __init__(self):
        print('初始化中...')
        self.connDB = pymysql.connect(host=DB_HOST,
                                      user=DB_USER,
                                      passwd=DB_PASSWD,
                                      db=DB_DB,
                                      charset='utf8mb4')
        self.connDB.ping()
        self.cu=self.connDB.cursor()

    def workOn(self):
        L=[]
        with open("./1W.txt","r",encoding="utf-8")as f:
            while True:
                res=f.readline().replace("\r","").replace("\n","")
                if not res:
                    break
                L.append(res)
        #统计插入所需时间
        start = time.time()
        sql = "insert ignore into article(an) values(%s);"
        
        #execute 执行代码
        for l in L:
            self.cu.execute(sql, l)
            
        #executemany 执行代码
        #self.cu.executemany(sql, tuple(L))
        
        self.connDB.commit()
        print('共计用时(秒):' + str(round(time.time() - start, 2)))

        self.cu.close()
        self.connDB.close()


if __name__ == '__main__':
    insert=IN_sql()
    insert.workOn()

测试结果

方法\量级\耗时(s) 1W 10W 100W
execute 3.126 25.139 248.022
executemany 0.1 0.981 10.854

总结

可以看出明显的区别,,如果需要批量插入数据库,还是用 executemany方法好些,这个和execute 完全不是一个数量级!!!

最近有朋友问到,executemany 和原生SQL 语句有好多的区别?
这里本人又进行了测试:

    def workOn(self):
        L=[]
        with open("./100W.txt","r",encoding="utf-8")as f:
            while True:
                res=f.readline().replace("\r","").replace("\n","")
                if not res:
                    break
                L.append(res)
        #统计插入所需时间
        start = time.time()
        print("start time:" + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(start)))
        sql = "insert into article(an) values  "
        for l in L:
            sql += "('%s'), " % l
        sql = sql.rstrip(', ') + ';'
        self.cu.execute(sql)
        self.connDB.commit()
        end=time.time()
        print("end time:"+time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(end)))
        print('共计用时(秒):' + str(round(end - start, 3)))

最终结果:20.176s

WHAT?FUCK?

为什么执行原生SQL 比executemany 还要慢啊?理论上原生SQL应该是最快的。

通过查询源码得知,executemany实际上也是把各个参数组合成一条SQL语句执行(insert into article(an) values (),(),(),(),(),()),优化的地方主要是在字符串的拼接上。

最后经过测试得到:本人自己的代码字符串拼接花了12s左右的时间,写入SQL语句花了8s左右,而executemany 字符串拼接仅花了2s左右。

所以,小伙伴们以后遇到大批量数据写入时尽量使用executemany 方法吧!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pymysql中 execute 和 executemany 性能对比,以及与原生SQL 相比如何 的相关文章

  • Python3入门基础(10)一个对象

    Python3 面向对象 面向对象技术 与 Java 类似 类 Class 用来描述具有相同的属性和方法的对象的集合 它定义了该集合中每个对象所共有的属性和方法 对象是类的实例 方法 类中定义的函数 类变量 类变量在整个实例化的对象中是公用
  • _signature、a_bogus、X-Bogus、msToken生成【2023.8.24】全站通用a-bogus

    本文以教学为基准 本文提供的可操作性不得用于任何商业用途和违法违规场景 本人对任何原因在使用本人中提供的代码和策略时可能对用户自己或他人造成的任何形式的损失和伤害不承担责任 包含关注 点赞等 没露任何版权请审核员认真对待谢谢 2022 12
  • Python项目:学生信息管理系统(完整版)

    本文是基于上一篇 python项目 学生信息管理系统 初版 进行了完善 并添加了新的功能 主要包括有 完善部分 输入错误 无数据查询等异常错误 新的功能 文件的操作 文件的读写 其中重点是对文本字符串的详细解析 关于整个解析拆解和重组详见代
  • pytorch的语义分割------数据增广

    官方文档 https pytorch org docs stable torchvision transforms html highlight torchvision 20transforms 20functional module to
  • python matplotlib数据可视化案例-生成柱状图,饼图(扇形图),词云。

    目前python spark scala十分火爆 于是我就利用爬虫将猎聘上的招聘信息进行了一下获取 相比起来 猎聘上的职位数量还是很多的 3中技术类型以 python spark scala 作为关键词 一共爬取了一万多条信息 爬取的主要信
  • Opencv-python3,处理rtsp流视频-----踩坑总结+VideoCapture.get()详解:

    最近项目在用opencv处理rtsp流相机 中间也踩了很多坑 这里写篇博客帮助那些可能会遇到相似问题的同胞 注 我这里同时用到了四个相机 1 电脑同时连接多个相机后 之后去打开rtsp相机时 初次打开特别耗时 甚至打开失败 在Win10上需
  • Windows7(x64) 安装Python3.7.0

    日期 2018年8月8日 作者 Commas 注释 本文写Windows7 x64 安装Python3 7 0 讲述了基本的安装操作 同时也介绍了一些相关的基础知识 本文若有哪些地方写的有所纰漏 还望各位看客指出 谢谢 如果您想了解更多有关
  • python3: xpath的使用

    转 本文转自 https blog csdn net qq 36148847 article details 79167267 python 具有一些比较流行的解析库 例如 lxml 使用的是 XPath 语法 是大众普遍认为的网页文本信息
  • Python绘制三角函数图(sin\cos\tan)并标注特定范围

    根据我们指定的条件检索函数中的元素 import matplotlib pyplot as plt import numpy as np a np linspace 0 2 np pi 50 b np sin a plt plot a b
  • python中lambda语法格式及实例

    Python 3中的Lambda函数的语法格式如下 lambda 参数列表 表达式Lambda函数以关键字lambda开始 后面是参数列表 参数列表可以包含任意数量的参数 但只能有一个表达式 参数列表的语法和函数定义的参数列表语法相同 可以
  • python-pymysql常用功能封装

    目录 简介 代码 测试 参考 简介 pymysql是一个客户端 本文进行一个简单封装 主要是结构化和批量操作 代码 import pymysql class MysqlCli def init self host user password
  • python3 Excel转txt

    使用场景 每次都是点一下Excel表格链接 调到浏览器中 内容数据也多 这种机械的活 对于程序员来说 能省则省 最后的结果 附上代码 coding utf 8 Time 2018 7 19 19 47 Author 蛇崽 Email 643
  • python pyinstaller打包参数介绍(转)

    pyinstaller相关参数 F onefile 打包一个单个文件 如果你的代码都写在一个 py文件的话 可以用这个 如果是多个 py文件就别用 D onedir 打包多个文件 在dist中生成很多依赖文件 适合以框架形式编写工具代码 我
  • python线程与进程概述_1.24

    多进程与多线程 进程 Process 是计算机中的程序关于某数据集合上的一次运行活动 是系统进行资源分配和调度的基本单位 是操作系统结构的基础 线程 Thread 有时被称为轻量级进程 Lightweight Process LWP 是程序
  • Python 一篇入门

    目录 Python 的简介与特点 Python支持多种编程风格 解释运行 跨平台 可扩展强 可嵌入 丰富的库 Python版本选择 Python开发环境搭建 认识Python解释器 快速入门 变量和赋值 动态类型 变量命名规则 认识 数字
  • ModuleNotFoundError:jupyter 中没有名为“pymysql”的模块

    在 jupyter 笔记本中导入 pymysql 后出现以下错误 请帮我找出错误 import pymysql print Welcome ModuleNotFoundError
  • 1054, 字段列表中未知列“索引”

    df row head identifier link likes count company 0 2292512316069378197 https www instagram com p B Qo84ihfiV 9608 Ralph L
  • django 1.5 + pymysql 错误:ImportError:无法导入名称 Thing2Literal

    我尝试使用 django1 5 和pymysql https github com petehunt PyMySQL MySQLdb 如下如何使 Django 与不受支持的 MySQL 驱动程序 例如 gevent mysql 或 Conc
  • 使用python将mysql查询写入csv,需要显示字段名称

    我有以下内容 import MySQLdb as dbapi import sys import csv dbServer localhost dbPass supersecretpassword dbSchema dbTest dbUse
  • 在pymysql中选择查询

    当执行以下命令时 import pymysql db pymysql connect host localhost port 3306 user root cur db cursor print cur execute SELECT Par

随机推荐

  • PCL 点云投影到直线(C++详细过程版)

    目录 一 算法原理 二 代码实现 三 结果展示 1 原始点云 2 投影结果 一 算法原理 直线方程有三种表示法 一般式 点向式 参数式 PCL中统一采用的是点向式 直线的点向式方程为 x x 0 m y
  • 星星之火:国产讯飞星火大模型的实际使用体验(与GPT对比)

    AIGC技术内容创作征文 全网寻找AI创作者 快来释放你的创作潜能吧 文章目录 1 前言 2 测试详情 2 1 文案写作 2 2 知识写作 2 3 阅读理解 2 4 语意测试 重点关注 2 5 常识性测试 重点关注 2 6 代码理解与生成
  • 【17 > 分布式接口幂等性】1. 概述与接口重试的问题

    一 本章概述 二 接口幂等性 2 1 定义 2 2 运用场景 2 3 保证幂等性的策略有哪些 2 4 如何实现 2 5 如何操作 一 本章概述 什么是幂等性 幂等性设计的 核心思想 select updates delete insert
  • HTML的列表标签,表格标签

    前端学习经验 3 HTML 列表标签 li 此标签定义列表项目 用于有序列表 ol 和无序列表 ul 中 无序列表标签 ul 无序列表 ul 此标签定义无序列表 例 ul li 无序列表1 li li 无序列表2 li li 无序列表3 l
  • C#驱动ESP32控制机器臂

    物料清单 介绍 NET nanoFramework 是一个免费的开源平台 可以为受限嵌入式设备编写托管代码应用程序 它适用于多种类型的项目 包括物联网传感器 可穿戴设备 学术概念验证 机器人技术 业余爱好者 创客创作甚至复杂的工业设备 通过
  • 【VTK】FindPokedRenderer函数

    最近写VTK的响应程序发现鼠标响应函数最后都会有InvokeEvent函数 部分有FindPokedRenderer 对这两个函数的运行机制还不是很了解 现在具体介绍一下 1 FindPokedRenderer 作为actor的管理工具 还
  • 基于linux下的dm9000网卡移植全分析

    DM9000可以直接与ISA总线相连 也可以与大多数CPU直接相连 Mini2440采用的是dm9000直接连接CPU s3c2440 上 就像是nandflash一样直接被挂在CUP上 被挂在s3c2440的bank4上 小插曲1 s3c
  • web项目部署到某云Linux服务器的详细步骤

    一 安装xshell 和 xftp 1 xshell连接服务器 方式有几种 这里只介绍其中之一 在 某云 密钥对创建密钥对 然后会得到下载的密钥对文件 打开xshell 打开 新建 上图中的主机填某云 实例 中的 然后在xshell 用户身
  • Python3,Pandas这4种高频使用的筛选数据的方法,不得不说,确实挺好。

    Pandas数据筛选方法 1 引言 2 4种高频使用数据筛选方法 2 1 布尔索引 2 2 isin 方法 2 3 query 方法 2 4 loc 方法 3 总结 1 引言 小屌丝 鱼哥 share一下 数据筛选的方法呗 小鱼 Excel
  • 精度 vs 效率:模型越小,精度就一定越低吗?

    导语 深度学习是否朝着正确的方向发展 以下是我最近在伦敦 O Reilly AI Conference 和 DroidCon 上的两次谈话的改编 今年早些时候 NVIDIA 的研究人员发布了 MegatronLM 这是一个拥有 83 亿个参
  • 东方财富choice金融终端研究笔记

    东方财富choice金融终端研究笔记 最近在研究 东方财富choice金融终端 我就搞不懂了 他们弄这个东西是存心不让人懂的吗 说明PDF第四页 方式一 使用激活工具 适用于有图形界面 根据所用系统环境 运行接口激活工具LoginActiv
  • 第一节:Keras深度学习框架之环境搭建

    请在学习本节前阅读我们之前的预热课程 卷积神经网络的框架解读 上 BBM的开源HUB的博客 CSDN博客 卷积神经网络的框架解读 下 BBM的开源HUB的博客 CSDN博客 从本节开始 我们将进入到Keras的详细介绍和代码精读 为开始我们
  • 02-编写单个字节设备模块的驱动套路

    目录 1 单字节设备和多字节设备的区别 2 单字节设备 LED设备驱动 的驱动套路 2 1 头文件 2 2 定义设备驱动相关的变量 2 3 编写file operations 相关操作的函数 2 3 1 open函数 2 3 2 relea
  • matlab做角谱传播代码_AI

    运筹OR帷幄 转载 作者 机器之心 编者按 对python语言有所了解的人都知道Numpy这个数学处理工具包 而它在机器学习中也有很重要的地位 通过合理的使用Numpy这个工具 可以简单快速地搭建模型的数学计算流程 可以说是一把 利剑 普林
  • 阿里云:网络编程 bind:cannot assign requested address errno:99 问题

    解决方案 阿里云上的服务器代码绑定的 IP 需要时内网 IP ifconfig 查看 其他客户端连接服务器时所用的 IP 得是阿里云的外网 IP 查看实例即可 分析思路 猜想1 bind cannot assign requested ad
  • 解决“Pycharm中用Install Package 安装第三库出错”问题的经验

    1 问题描述 在PyCharm中通过Install Package 安装第三库 requests 报错了 但是可以通过终端Terminal可以安装 报错信息如图 2 问题分析及方法对策 根据我自己的经历以及网上搜寻所得 大致总结出如下原因
  • Python Selenium UI自动化测试

    1 自动化测试基础 1 1 自动化测试的定义 将人为的测试行为转化为机器自动执行的过程 1 2 自动化测试的目的 减少成本 提高测试效率 减少人为因素对测试的影响 1 3 什么项目适合做自动化测试 项目界面稳定 需求明确 项目周期长 测试脚
  • robot framework 接口自动化测试(2)get方式传递token

    之前介绍了get请求头不需要传递参数的方式 那么对于需要传入登录状态的token接口我们怎么测试呢 下面介绍一下 首先先做post的接口自动化获取到token token实时更新 所以每次调用需要token的get接口测试都需要post的t
  • postman-post格式报文接口的配置

    post格式报文接口的配置 1 新建请求 2 配置请求报文 输入接口URL authorization界面可配置授权信息 header界面可以配置请求头 body界面可以配置请求体 非作者允许 严禁转载 http接口有许多格式 post格式
  • pymysql中 execute 和 executemany 性能对比,以及与原生SQL 相比如何

    今天在mysql中插入大批量数据时 突然想起pymysql 还有executemany 方法 那么这两个方法到底谁快 快多少 测试环境 python3 mysql pymysql 老规矩 先上测试代码 class IN sql def in