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

Python连接MySQL执行UPDATE语句报错:参数不足问题求助

解决MySQL UPDATE语句参数不足的错误

错误原因分析

你的代码存在三个关键问题,导致触发参数不足的报错:

  • cursor.execute()要求第二个参数必须是包含所有占位符对应值的元组或列表,单个参数也需要用元组/列表包裹(比如单个值要写成(val,),避免被解析成单个字符)。
  • 调用borrow函数时错误地将参数包装成列表,函数定义接收两个独立参数,直接传原始值即可。
  • 执行bquery时错误拆分传递参数,应该把nameb和bookbor合并成一个参数集合。

修正后的完整代码

import sys
import mysql.connector

mydb = mysql.connector.connect(host='localhost', user='root', passwd='anohacker', database='csproj')
cursor = mydb.cursor(buffered=True)

nameb = input("enter your name: ")
bookbor = int(input("Enter book code to borrow: "))

def borrow(nameb, bookbor):
    bquery = "update inventory set name_of_borrower=%s where book_code=%s"
    stock1 = "update inventory set in_stock=in_stock-1 where book_code=%s"
    stock2 = "update inventory set borrowed=borrowed+1 where book_code=%s"
    # 单个参数用元组包裹(注意末尾的逗号,确保是元组类型)
    cursor.execute(stock1, (bookbor,))
    cursor.execute(stock2, (bookbor,))
    # 多个参数合并成一个元组,顺序与SQL占位符对应
    cursor.execute(bquery, (nameb, bookbor))
    mydb.commit()

# 直接传递原始参数,无需包装成列表
borrow(nameb, bookbor)

关键修改点说明

  • 单个占位符的SQL执行:参数写成(bookbor,),这是单个元素的元组标准写法,能让mysql.connector正确识别为一个完整参数,避免把整数拆分成单个数字字符。
  • 多占位符的SQL执行:把nameb和bookbor放入同一个元组(nameb, bookbor),顺序要和SQL语句中%s的位置一一对应。
  • 函数调用:直接传递nameb和bookbor原始值,匹配函数定义的参数格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 06:55:26