【问题标题】:MySQL and Python Error : While I am trying to insert a row to my table from the Tkinter widget's(Entry, ComboBox, Radio Button), I'm getting an errorMySQL 和 Python 错误:当我尝试从 Tkinter 小部件(条目、组合框、单选按钮)向表中插入一行时,出现错误
【发布时间】:2021-09-19 00:08:41
【问题描述】:

当我尝试从 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()、yrsVar.get()、smVar.get()、nVar.get()、rollVar.get()、genVar.get()、dVar.get()、eVar。 get()、mobVar.get()、adVar.get()、rdVar.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)}")

【问题讨论】:

标签: python mysql mysql-python


【解决方案1】:

试试这个方法: (使用%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

【讨论】:

    【解决方案2】:

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

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

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

    还有其他选择:How to insert new row to database with AUTO_INCREMENT column without specifying column names? 但是指定列/值对是一种更可靠的解决方案。

    【讨论】:

      猜你喜欢
      • 2015-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-09
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2020-03-06
      相关资源
      最近更新 更多