Python MySQLdb executemany 批量插入与 ON DUPLICATE KEY UPDATE 避坑指南

Miles
Miles
发布时间:2026-10-13| 2人浏览过
原创

本文介绍Python中使用MySQLdb的executemany进行批量数据插入的性能优势及注意事项。重点解析%s占位符在日期字段中不可加引号的原理,以及executemany与ON DUPLICATE KEY UPDATE联用时易出现的字符串格式化报错及其解决方案,帮助开发者避免数据插入错误并提升处理效率。

在使用Python的executemany方法执行数据批量插入操作时,有几个关键细节需要特别注意,以确保数据的正确性和执行的稳定性。

#coding:utf8
conn = MySQLdb.connect(host = “localhost”, user = “root”, passwd = “123456”, db = “myDB”)
cursor = conn.cursor()
sql = “insert into myTable (created_day,name,count) values(%s,%s,%s) ON DUPLICATE KEY UPDATE count=count+values(count)”
args=[("2012-08-27","name1",100),("2012-08-27","name1",200),("2012-08-27","name2",300)]
try:
  cursor.executemany(sql, args)
except Exception as e:
  print0(“执行MySQL: %s 时出错:%s” % (sql, e))
finally:
  cursor.close()
  conn.commit()
  conn.close()

参数args通常是一个包含多个元组的列表,每个元组对应MySQL中的一条记录。需要特别注意的是,对于created_day字段对应的%s占位符,绝对不能加上引号。这是因为executemany内部机制会先对SQL语句进行正则匹配查找%s,随后进行字符串嵌入处理。如果给%s加上引号,MySQL可能会将其解析为非法日期格式,导致插入类似“0000-00-00”的错误日期数据。

当需要一次性插入大量数据时,强烈推荐使用executemany方法。根据实际测试经验,逐条执行insert语句可能需要耗费2至3小时,而使用executemany仅需2至3秒即可完成,性能提升显著。

当executemany与ON DUPLICATE KEY UPDATE子句联合使用时,若按照常规SQL写法,例如:sql=”insert into myTable (created_day,name,count) values(%s,%s,%s) ON DUPLICATE KEY UPDATE count=count+%s”,程序往往会抛出“not all arguments converted during string formatting”的格式化错误。这通常是因为executemany对参数数量的解析与ON DUPLICATE KEY UPDATE中的占位符处理存在冲突,需调整SQL结构或参数传递方式。

以上介绍了Python中executemany的具体用法及常见陷阱,希望能对各位开发者有所帮助。如有任何疑问或发现其他潜在问题,欢迎留言交流,我们将及时回复。感谢大家对本站的支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。