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

Python使用MariaDB执行UPDATE报错Argument 2 must be Tuple or List求助

问题根因
  • 官方mariadb Python库的cursor.execute()方法默认仅支持位置占位符(%s),不支持你写的:xxx格式的命名占位符,且第二个参数要求传入元组/列表类型的有序参数,你传入的字典不符合要求,因此触发TypeError: Argument 2 must be Tuple or List!报错。
修复方案

把UPDATE语句的占位符改为%s,同时将第二个参数改为按占位符顺序排列的元组即可,修改后的完整update函数如下:

# create update function 
def update():
    # connect to database
    conn = mariadb.connect(
        user="root",
        password="pass",
        host="127.0.0.1",
        port=3306,
        database="polymer"
    )
    # create cursor
    c = conn.cursor()
    record_id = select_box.get()
    # 修改为%s位置占位符
    c.execute("""UPDATE tssr SET
        Order_name = %s,
        Operator_name = %s,
        Sample = %s,
        Strain = %s
        WHERE ID = %s""",
        # 按SQL占位符顺序传入参数,整体用元组包裹
        (
            Order_name_editor.get(),
            Operator_name_editor.get(),
            Sample_editor.get(),
            Strain_editor.get(),
            record_id
        ))
    # commit changes
    conn.commit()
    # 补充关闭游标操作,避免资源泄漏
    c.close()
    # close connection
    conn.close()
可选配置说明

如果确实想保留命名参数写法,可在创建游标时指定named=True参数,修改游标创建代码为:

c = conn.cursor(named=True)

之后无需修改原有SQL语句和字典传参逻辑,也可以正常运行。

内容的提问来源于stack exchange,提问作者Zlatan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:15:03