MySQL和Python错误:当我尝试从Tkinter小部件(条目,组合框,单选按钮)向我的表中插入一行时,出现错误



当我试图从Tkinter条目小部件(条目、组合框、单选按钮(向表中插入一行时,我收到以下错误:

ERROR 1136(21S01): Column count doesn't match value count at row 1.

列名:

Course, 
U_Id, 
Subject, 
Years, 
Semester, 
Student_Names, 
Roll_No, 
Gender, 
DOB, 
Email, 
Mobile, 
Address, 
Photo

其中U_Id为自动增量,

值:crsVar.get((、sbVar.get

请帮帮我,这是我的代码

try:
conn = mysql.connector.connect(host="localhost", username="root", 
password="Sahil#12", database="attendancesystem")
c = conn.cursor()
c.execute('insert into `students_detail` values(crsVar.get(), sbVar.get(),
yrsVar.get(), smVar.get(), nVar.get(), rollVar.get(), 
genVar.get(), dVar.get(), eVar.get(), mobVar.get(),
adVar.get(), rdVar.get()))                          
conn.commit()
conn.close()
messagebox.showinfo("Success", "Students details has been submitted", 
parent=self.master)
except Exception as e:
messagebox.showerror("Error", f"Due to {str(e)}")

这里的问题是,由于U_Id自动递增,您有12个值和13列。您的最佳选择是手动指定表格的列,即:

c.execute('insert into `students_detail` (Course, Subject, Years, ...)  values(crsVar.get(), sbVar.get(),
yrsVar.get(), ...))                          

(请注意,列或值中都不包含U_Id字段(。

还有其他选择:如何在不指定列名的情况下,用AUTO_INCREMENT列将新行插入数据库?然而,指定列/值对是一个更稳健的解决方案。

请尝试以下方法:(使用%s避免SQL注入(

c.execute("INSERT INTO students_detail "                                      
"(value1, value2, value3, value4, value5)"           
"VALUES (%s, %s, %s, %s, %s) ",                                
(                                                              
widget[0].get(),                     #
widget[1].get(),                     #
widget[2].get(),                     #
widget[3].get(),                     #
widget[4].get(),                     #
)) ## this widget.get() is only an example, you will need to change all these values

最新更新