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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:36:02