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
相关产品推荐
相关产品推荐

