如何用Python向MySQL表插入数据时避免重复,存在则更新?
MySQL插入数据避免重复且存在即更新的调整方案
前置操作
首先需要为ftp表设置唯一索引,用来判定数据是否重复:
- 如果是单个字段判定重复,比如字段
a唯一:执行建索引语句CREATE UNIQUE INDEX idx_ftp_a ON ftp(a); - 如果是多个字段组合判定重复,比如
a+b的组合唯一:执行建索引语句CREATE UNIQUE INDEX idx_ftp_ab ON ftp(a,b);
唯一索引的定义必须和你业务上判断「数据重复」的规则完全一致,否则无法正确触发重复识别逻辑。
调整后的SQL语句
你的需求是重复时更新原有条目,直接使用MySQL原生的INSERT ... ON DUPLICATE KEY UPDATE语法即可,修改后的SQL如下:
INSERT INTO ftp(a,b,c,d) VALUES (%s, %s, %s, %s) ON DUPLICATE KEY UPDATE c = VALUES(c), d = VALUES(d);
语法说明
- 当插入的数据触发唯一索引冲突时,不会报错也不会插入新条目,转而执行
ON DUPLICATE KEY UPDATE后的更新逻辑 - 示例中
c = VALUES(c)表示将原有条目的c字段更新为本次要插入的新值,你可以根据实际业务需要调整要更新的字段 - 如果你使用的是MySQL 8.0.19及以上版本,也可以用更规范的别名写法:
INSERT INTO ftp(a,b,c,d) VALUES (%s, %s, %s, %s) AS new_entry ON DUPLICATE KEY UPDATE c = new_entry.c, d = new_entry.d;
补充方案(仅作参考,不符合你当前需求)
如果后续不需要更新原有条目,仅需要跳过重复插入不报错,可以使用INSERT IGNORE语法:
INSERT IGNORE INTO ftp(a,b,c,d) VALUES (%s, %s, %s, %s)
内容的提问来源于stack exchange,提问作者Kaung Sat
相关产品推荐
相关产品推荐

