PyMySQL中INSERT ON DUPLICATE KEY UPDATE的元组参数问题
解决MySQL INSERT ON DUPLICATE KEY UPDATE的参数传递错误
问题出在参数传递的方式上:你的SQL语句里总共有7个插入占位符加2个更新占位符,一共9个%s,但你给execute传了两个独立的元组。而MySQL游标execute方法只接受一个参数序列,它只会读取第一个元组的7个值,剩下的2个占位符找不到对应参数,所以抛出TypeError: not enough arguments for format string。
解决方法:合并两个元组
把insert_values和update_values合并成一个元组后再传给execute,让占位符和参数数量完全匹配。
错误写法
# 错误:分开传递两个元组 cursor.execute(insert_update_sql, insert_values, update_values)
正确写法
# 正确:合并两个元组为一个 combined_params = insert_values + update_values cursor.execute(insert_update_sql, combined_params)
逻辑验证
假设你构造后的SQL是这样的:
INSERT INTO your_table (col1, col2, ..., col7) VALUES (%s,%s,%s,%s,%s,%s,%s) ON DUPLICATE KEY UPDATE colX=%s, colY=%s
合并后的combined_params是一个9元素的元组,刚好对应9个%s占位符,参数与占位符完全匹配后就能正常执行。
内容的提问来源于stack exchange,提问作者Jorge García Otero
相关产品推荐
相关产品推荐

