当我试图从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