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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:06:03