Python使用MariaDB执行UPDATE报错Argument 2 must be Tuple or List求助
问题根因
- 官方
mariadbPython库的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
相关产品推荐
相关产品推荐

