You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用MySQLdb executemany批量插入大量数据时部分记录丢失如何解决

批量插入MySQL数据丢失的可能原因
  • 未手动提交事务
    MySQLdb默认开启事务机制,执行完cursor.executemany()后必须调用数据库连接对象的commit()方法,否则所有修改会在连接关闭时自动回滚,不会实际写入数据库。你提供的插入函数中没有提交事务的逻辑,是最高概率的诱因。
  • 必填字段未赋值也无默认值
    你的表结构中anaq_capacidad字段定义为int(1) NOT NULL,且未设置默认值,但INSERT语句的字段列表中完全没有包含该字段,插入时会因必填字段缺失直接失败。
  • 字符集不兼容导致插入失败
    表的字符集为latin1,仅支持西欧字符,而Python2中读取Excel得到的是Unicode字符串,如果包含重音符号、中文等latin1不支持的字符,就会出现你看到的Incorrect string value警告,严重时会直接导致整条/整批记录插入失败。你之前配置了忽略警告,所以完全感知不到这类错误。
  • 批量插入的原子性导致整批失败
    InnoDB引擎的事务是原子性的,executemany批量插入的100条记录中只要有1条不符合约束(比如字段长度超限、枚举值不合法),整批100条记录都会全部回滚,不会有部分插入的情况。
  • 字段长度超出定义限制
    表中anaq_letra字段定义为varchar(1),仅允许存储1个字符,如果拆分得到的let变量长度超过1(比如原始拆分结果是两位的04而非4),就会触发约束错误导致插入失败。
  • 异常捕获逻辑过于宽泛
    你使用了无差别try-except捕获所有异常,仅打印错误类型,很多非致命的约束错误、警告不会被捕获输出,无法感知插入过程中的异常。

内容的提问来源于stack exchange,提问作者Julio Garcia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 17:48:01