PyMySQL中INSERT ON DUPLICATE KEY批量操作出现重复键行问题求助
解决重复键时的插入/更新问题
你的问题核心是**keycolumn没有唯一约束**,导致ON DUPLICATE KEY UPDATE无法触发更新逻辑——这个语句只有在插入的键触发主键或唯一键冲突时,才会执行更新操作,普通索引不会触发这个逻辑,所以数据库会直接插入重复行。
修正步骤:
给
keycolumn添加唯一约束
如果你还没创建表,直接在建表语句里加唯一约束:cursor.execute('CREATE TABLE exampletable (keycolumn FLOAT UNIQUE, valuecolumn FLOAT)') # 唯一约束会自动创建索引,原来的单独索引可以省略,也可以保留(不影响)如果表已经创建好了,用ALTER语句修改结构:
cursor.execute('ALTER TABLE exampletable ADD UNIQUE KEY keycolumn_unique (keycolumn)')保留原有的批量插入代码
你原来的executemany写法完全没问题,不需要改成三元组列表:examplelist = [[key1, value1], [key2, value2], [key3, value3]] sql = "INSERT INTO exampletable (keycolumn, valuecolumn) VALUES (%s, %s)"\ " ON DUPLICATE KEY UPDATE valuecolumn = VALUES(valuecolumn)" cursor.executemany(sql, examplelist)
这样执行后,当keycolumn存在重复值时,数据库会自动更新对应的valuecolumn,不存在则插入新行,不会再出现重复的key行。
内容的提问来源于stack exchange,提问作者hedgedandlevered
相关产品推荐
相关产品推荐

