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

Python连接MySQL更新学生数据报SQL参数未全部使用错误求排查

问题原因及修复方案

核心错误点

  • SQL语法错误:UPDATE语句的SET关键字后不需要加括号,且PHOTOSAMPLE=%s与WHERE之间多了一个多余的逗号,整段SQL的括号也是多余的,这会导致参数解析错位。
  • 参数数量与占位符不匹配:你在SQL中声明了DEPARTMENT=%s作为第一个更新字段,但参数列表里没有传入self.var_DEPARTMENT.get(),反而多了一个不存在于更新字段列表的self.var_radio1.get(),导致占位符和参数数量对应不上,触发你遇到的报错。
  • 代码逻辑错误:数据库提交、游标操作等代码写在了判断是否更新的分支外,当用户选择不更新时会出现空对象调用的报错。

修正后的代码

更新函数修改内容(原有变量定义无需改动)

def update_data(self):
    if self.var_DEPARTMENT.get() == "Select Department " or \
       self.var_STUDENT_NAME.get() == "" \
       or self.var_STUDENT_ID.get() == "":
       messagebox.showerror("Error", "所有字段均为必填项", 
           parent=self.root)
    else:
        try:
            Update = messagebox.askyesno("更新确认",
                "你确定要更新学生数据吗?")
            if Update:
                con = mysql.connector.connect(host="localhost", 
                      user="root",password="123root",
                      database="recognition") 
                my_cursor = con.cursor()
                # 修正SQL语法,去掉多余括号和逗号,调整参数顺序与占位符一一对应
                my_cursor.execute(
                    "update students set DEPARTMENT=%s,COURSE=%s,"
                       "YEAR_=%s,SEMESTER=%s,STUDENT_NAME=%s,DIVISION=%s,"
                       "ROLL_NUMBER=%s,GENDER=%s,DOB=%s,"
                       "EMAIL=%s,PHONE=%s,ADDRESS=%s,TEACHER=%s,"
                       "PHOTOSAMPLE=%s WHERE STUDENT_ID=%s",
                   (self.var_DEPARTMENT.get(),
                    self.var_COURSE.get(),
                    self.var_YEAR_.get(),
                    self.var_SEMESTER.get(),
                    self.var_STUDENT_NAME.get(),
                    self.var_DIVISION.get(),
                    self.var_ROLL_NUMBER.get(),
                    self.var_GENDER.get(),
                    self.var_DOB.get(),
                    self.var_EMAIL.get(),
                    self.var_PHONE.get(),
                    self.var_ADDRESS.get(),
                    self.var_TEACHER.get(),
                    self.var_PHOTOSAMPLE.get(),
                    self.var_STUDENT_ID.get()))                
                con.commit()
                messagebox.showinfo("操作成功", "学生信息更新成功", parent=self.root)
                self.fetch_data()
                con.close()
        except Exception as ude:
            messagebox.showerror("--错误--", f"错误内容为:{str(ude)}", 
                parent=self.root)

额外注意事项

  • 如果你之前的var_radio1.get()是性别字段的取值,你需要确认是否和self.var_GENDER.get()重复,根据你给出的变量定义已经有单独的var_GENDER存储性别,所以直接删除多余的var_radio1参数即可。
  • 尽量不要用全局变量存储数据库连接,每次操作单独创建连接用完关闭更安全,避免连接泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 11:06:08