Python Update函数返回错误,不更新数据
未能使此代码正常工作错误代码是(并非所有参数都在SQL语句中使用)我正在附加MySQL描述的图像,已经花费了很多时间,但我对它的处理越多,它变得越糟糕,并且还会破坏其他函数 请不要忽视拒绝或黑名单我,因为我没有提出一个好问题的经验,但我会学习Python Update函数返回错误,不更新数据,python,mysql,tkinter,Python,Mysql,Tkinter,未能使此代码正常工作错误代码是(并非所有参数都在SQL语句中使用)我正在附加MySQL描述的图像,已经花费了很多时间,但我对它的处理越多,它变得越糟糕,并且还会破坏其他函数 请不要忽视拒绝或黑名单我,因为我没有提出一个好问题的经验,但我会学习 self.var_DEPARTMENT =StringVar() self.var_COURSE = StringVar() self.var_YEAR_ = StringVar() self
self.var_DEPARTMENT =StringVar()
self.var_COURSE = StringVar()
self.var_YEAR_ = StringVar()
self.var_SEMESTER = StringVar()
self.var_STUDENT_ID = StringVar()
self.var_STUDENT_NAME = StringVar()
self.var_DIVISION = StringVar()
self.var_ROLL_NUMBER = StringVar()
self.var_GENDER = StringVar()
self.var_DOB = StringVar()
self.var_EMAIL = StringVar()
self.var_PHONE = StringVar()
self.var_ADDRESS = StringVar()
self.var_TEACHER = StringVar()
self.var_PHOTOSAMPLE = StringVar()
作用
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", "All Fields Are Required",
parent=self.root)
else:
try:
Update = messagebox.askyesno("Update",
"Do you want to update studtent data")
global con
self.fetch_data()
if Update > 0:
con = mysql.connector.connect(host="localhost",
user="root",password="123root",
database="recognition")
my_cursor = con.cursor()
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_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_radio1.get(),
self.var_STUDENT_ID.get()))
else:
if not Update:
return
my_cursor = con.cursor()
messagebox.showinfo("Success", "students details updated
successfully", parent=self.root)
con.commit()
self.fetch_data()
con.close()
except Exception as ude:
messagebox.showerror("--ERR--", f"The Err is{str(ude)}",
parent=self.root)
所以几周前,我也遇到了同样的更新问题。也许对你有帮助=
cur_personen.execute("UPDATE person SET vorname=%s, nachname=%s," # UPDATE PERSON ////////
" geburtstag=%s, stadtid_fk=%s WHERE id=%s",
(
self.parent.optionbar.person[1].get(),
self.parent.optionbar.person[2].get(),
self.parent.optionbar.person[3].get(),
self.parent.optionbar.person[4].get(),
self.parent.optionbar.person[0].get(),
))
这是一个稍微整理过的版本
def update_data(self):
if self.var_DEPARTMENT.get() == "Select Department " or \
not self.var_STUDENT_NAME.get() or \
not self.var_STUDENT_ID.get():
messagebox.showerror("Error", "All Fields Are Required",
parent=self.root)
return
if not messagebox.askyesno("Update",
"Do you want to update studtent data"):
return
self.fetch_data()
try:
con = mysql.connector.connect(host="localhost",
user="root",password="123root",
database="recognition")
my_cursor = con.cursor()
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_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_radio1.get(),
self.var_STUDENT_ID.get()))
messagebox.showinfo("Success", "students details updated successfully", parent=self.root)
con.commit()
self.fetch_data()
con.close()
except Exception as ude:
messagebox.showerror("--ERR--", f"The Err is {str(ude)}", parent=self.root)
您有一个语法错误。您需要删除“WHERE STUDENT_ID”前面的逗号。更具体地说,用空格替换逗号。代码中的缩进非常糟糕。我将尝试修复它。下次请分享准确的错误信息,以便我们不必猜测错误是什么!您不需要在那里创建另一个光标。如果
con
是全局的,为什么每次都要创建一个新连接?通常,你在应用程序中创建一次连接,然后在任何地方重复使用该连接,不需要全局
。你的研究id是否为自动增量
?你为什么不为id
使用%s
。不知道。。。我保存了错误的代码并将其发布。。现在,这是正确的一个…它工作得非常好,谢谢Joe Mo先生,一天4天/7小时,但找不到出路,现在我走上了一条路,为什么不使用“
而不是根据个人喜好拆分查询字符串。如果要打印字符串进行调试,则“”方法会插入额外的空格。无论哪种方式,都没有技术上的理由。我是否应该为了那些像我一样陷入困境并且找不到解决方案的人的利益发布整个程序,请添加一个部分,上面写着“这就是有效的方法”。我已被StackOverflow禁止查看答案帖子,它工作得非常完美