如何使用Python与MySQL Connector实现批量插入操作
使用mysql.connector实现MySQL批量插入优化
核心优化方案:用executemany()替代循环单条插入
mysql.connector提供的executemany()方法可一次性提交多条插入语句,大幅减少网络IO开销,能把21条插入的耗时从数秒压缩到毫秒级。结合连接池的具体实现如下:
1. 配置连接池
先初始化连接池,复用连接避免重复建立连接的额外开销:
import mysql.connector from mysql.connector import pooling # 初始化连接池 db_pool = pooling.MySQLConnectionPool( pool_name="my_pool", pool_size=5, # 根据业务需求调整池大小 host="你的数据库地址", user="数据库用户名", password="数据库密码", database="目标数据库名" )
2. 准备批量插入数据
把21个布尔值整理成二维列表格式,每个子列表对应一条插入记录的参数:
# 示例:21个布尔值的数据集 bool_values = [True, False, True, True, False, ...] # 补全剩余布尔值 # 转换为executemany要求的格式:[(val1,), (val2,), ...] batch_data = [(val,) for val in bool_values]
3. 执行批量插入
从连接池获取连接,用executemany()执行批量操作,同时做好事务处理:
try: # 从连接池获取连接 conn = db_pool.get_connection() cursor = conn.cursor() # 插入语句,注意mysql.connector用%s作为参数占位符 insert_sql = "INSERT INTO 你的表名(布尔类型字段名) VALUES (%s)" # 执行批量插入 cursor.executemany(insert_sql, batch_data) # 提交事务 conn.commit() print(f"成功插入{cursor.rowcount}条记录") except mysql.connector.Error as err: print(f"错误信息: {err}") # 出错时回滚事务,避免数据不一致 if conn.is_connected(): conn.rollback() finally: # 关闭游标和连接(连接会自动放回连接池,而非真正关闭) if cursor: cursor.close() if conn: conn.close()
关键注意事项
- 占位符规范:mysql.connector的参数占位符是
%s,不要和其他数据库驱动的?混淆。 - 数据格式匹配:批量数据必须是二维可迭代对象,即使只有一个字段,也要写成
(val,)的元组形式。 - 事务必要性:批量插入务必添加事务处理,保证数据的一致性,避免部分插入成功部分失败的情况。
- 连接池复用:使用完连接后调用
conn.close(),连接会自动放回连接池供后续请求复用。
内容的提问来源于stack exchange,提问作者user21051037
相关产品推荐
相关产品推荐

