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

