Python调用mysql.connector向MySQL表插数据无更新,求排查代码错误
代码错误汇总
- SQL语句注释错误:你定义的SQL字符串开头多了
#号,MySQL会将#后面的内容识别为注释,相当于执行了空SQL,直接导致没有插入逻辑运行。需要删掉SQL开头的#。 - 参数未绑定到执行语句:你已经把参数封装为元组
t,但调用cursor.execute(sql)时没有传入参数元组,正确写法是cursor.execute(sql, t),否则参数不会绑定到SQL的占位符。 - 异常处理变量名错误:
except块中你捕获的异常变量是e,但打印时用了未定义的error变量,同时print的语法书写错误,应该把逗号改为点调用format方法,正确写法是print("Failed to insert record into Mysql table: {}".format(e))。 - 多余的全局变量声明:函数已经通过参数
x1-x4接收传入值,没必要再声明global icode, iname, price, quantity,如果这四个全局变量在调用前未赋值,还会导致最后调用add_det时报未定义错误。 - 缩进语法错误:最后一行
add_det(icode, iname, price, quantity)的缩进层级错误,和函数定义的缩进不匹配,会触发语法错误,需要顶格书写。 - 连接未初始化的潜在风险:如果数据库连接失败,
conn变量不会被创建,finally块调用conn.is_connected()会抛出未定义错误,建议在try块前先初始化conn = None,finally块先判断conn是否存在再执行关闭操作。
修正后的参考代码
import mysql.connector def add_det(x1, x2, x3, x4): conn = None cursor = None try: conn = mysql.connector.connect(host='localhost', database='practicals', user='root', password='root1') cursor = conn.cursor() print("cursor objected created") # 删掉了SQL开头的# sql = """INSERT INTO inventory(item_code, item_name, price, quantity) VALUES (%s,%s,%s,%s)""" t = (x1, x2, x3, x4) print(t) # 传入参数元组 cursor.execute(sql, t) conn.commit() print(cursor.rowcount, "Records inserted") except mysql.connector.Error as e: # 修正异常变量和format语法 print("Failed to insert record into Mysql table: {}".format(e)) finally: if conn and conn.is_connected(): print("closing...") if cursor: cursor.close() conn.close() print("Mysql connection is closed") # 调用前请确保icode/iname/price/quantity四个变量已经被正常赋值 add_det(icode, iname, price, quantity)
内容的提问来源于stack exchange,提问作者hari
相关产品推荐
相关产品推荐

