Python执行含ON DUPLICATE KEY的MySQL语句提示参数不足如何解决
问题原因
你SQL语句里的参数占位符%s总数量和传入的参数元组长度不匹配:
- INSERT部分有15个字段,对应15个
%s占位符 - 追加的
ON DUPLICATE KEY UPDATE部分又额外用了5个%s占位符 - 合计需要20个参数,但你传入的
data_tuple只有15个元素,因此触发参数不足的报错。
解决方案
有两种常用的修复方式:
方案1:补全传入的参数元组
把UPDATE需要的5个参数追加到原有元组末尾即可:
data_tuple = ( event_url, url, title, address_1, address_2, event_by, start_time, end_time, ticket, going, interested, event_image_url, time.strftime('%Y-%m-%d %H:%M:%S'), output_path, description, # 追加UPDATE需要的参数 start_time, end_time, event_image_url, description, title ) cursor.execute(sql_insert_with_param, data_tuple)
方案2:用MySQL VALUES()函数复用插入值(更推荐)
不需要重复传参,直接用VALUES(字段名)引用INSERT部分对应字段的传入值,仅修改SQL语句即可:
sql_insert_with_param = """INSERT INTO events_fb (event_url, url, title, address_1, address_2, event_by, start_time, end_time, ticket, going, interested, event_image_url, createdAt, image_path, description) VALUES ( %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) ON DUPLICATE KEY UPDATE start_time=VALUES(start_time), end_time=VALUES(end_time), event_image_url=VALUES(event_image_url), description=VALUES(description), title=VALUES(title)""" # 原有参数元组不需要修改 data_tuple = (event_url, url, title, address_1, address_2, event_by, start_time, end_time, ticket, going, interested, event_image_url, time.strftime('%Y-%m-%d %H:%M:%S'), output_path, description) cursor.execute(sql_insert_with_param, data_tuple)
这种方式不用重复传递参数,代码更简洁,也避免了参数顺序写错的问题。
内容的提问来源于stack exchange,提问作者yoann84
相关产品推荐
相关产品推荐

