Python 混淆SQLite3错误

Python 混淆SQLite3错误,python,python-3.x,sqlite,Python,Python 3.x,Sqlite,我用python和SQLite3创建了一个数据库,我试图添加一些数据,但我目前收到了错误您没有为binding 1提供值。。我以前做过完全相同的数据库(不同的值),但没有得到这个错误,我在这里做错了什么 这是出现错误的数据库: def Add_User_Data(self): self.c.execute("INSERT INTO Employees VALUES (:ID, :FirstName, :Surname, :DOB, :Age, :Gender)",

我用python和SQLite3创建了一个数据库,我试图添加一些数据,但我目前收到了错误
您没有为binding 1提供值。
。我以前做过完全相同的数据库(不同的值),但没有得到这个错误,我在这里做错了什么

这是出现错误的数据库:

def Add_User_Data(self):
        self.c.execute("INSERT INTO Employees VALUES (:ID, :FirstName, :Surname, :DOB, :Age, :Gender)",
                     {'ID: ': self.AddEmployee.ID.get(), 'FirstName: ':self.AddEmployee.FirstName.get(), 'Surname: ':self.AddEmployee.Surname.get(),
                     'DOB: ':self.AddEmployee.DOB.get(), 'Age: ':self.AddEmployee.Age.get(), 'Gender: ':self.AddEmployee.Gender.get()})


        self.conn.commit()
这是一个没有出错的旧版本

def addEmployees(self):
        self.c.execute("INSERT INTO Employees VALUES (:FirstName, :Surname, :Age, :Postcode, :Wage, :Email, :Hours)",
                     {'FirstName': 'aa', 'Surname':"Jan" , 'Age':"21" ,
                     'Postcode':"UB5 7T3" , 'Wage':"1220000" , 'Email':"s@gmail.com" , 'Hours':"230"})

        self.conn.commit()
--------------------------------------------------------答复----------------------------------------------------------------

因此,我通过将布局更改为以下方式解决了问题:

self.params = (self.AddEmployee.ID.get(), self.AddEmployee.FirstName.get(), self.AddEmployee.Surname.get(),
        self.AddEmployee.DOB.get(), self.AddEmployee.Age.get(), self.AddEmployee.Gender.get())

        self.c.execute("INSERT INTO Employees VALUES (?, ?, ?, ?, ?, ? )", self.params)

        self.conn.commit()
我在以下位置找到了解决方案:

感谢所有回复并试图提供帮助的人

对于将来的读者,如图所示,Python sqlite3 DB-API支持用于参数化的qmark和命名样式。OP使用qmark样式解决了问题。然而,OP最初的尝试确实可以使用正确的字典键分配,其中字典键与命名参数完全对应

具体地说,由于字典键中的冒号和空格,以下字典将无法绑定到命名参数(
:ID,:FirstName,:姓氏,
):

{'ID: ': self.AddEmployee.ID.get(), 
 'FirstName: ':self.AddEmployee.FirstName.get(), 
 'Surname: ':self.AddEmployee.Surname.get(),
 'DOB: ':self.AddEmployee.DOB.get(), 
 'Age: ':self.AddEmployee.Age.get(), 
 'Gender: ':self.AddEmployee.Gender.get()}
但是,对于同一个已准备好的SQL语句,以下内容应适用:

{'ID': self.AddEmployee.ID.get(), 
 'FirstName': self.AddEmployee.FirstName.get(), 
 'Surname': self.AddEmployee.Surname.get(),
 'DOB': self.AddEmployee.DOB.get(), 
 'Age': self.AddEmployee.Age.get(), 
 'Gender': self.AddEmployee.Gender.get()}
总之,对于游标调用:

self.sql = "INSERT INTO Employees VALUES (:ID, :FirstName, :Surname, :DOB, :Age, :Gender)"

self.qparams = {'ID': self.AddEmployee.ID.get(), 
                'FirstName': self.AddEmployee.FirstName.get(), 
                'Surname': self.AddEmployee.Surname.get(),
                'DOB': self.AddEmployee.DOB.get(), 
                'Age': self.AddEmployee.Age.get(), 
                'Gender': self.AddEmployee.Gender.get()}

self.c.execute(self.sql, self.qparams)
self.conn.commit()

这是一个印刷错误。简单地说,删除参数字典键中的空格和冒号。此外,ID通常是自动生成的。@Parfait刚刚尝试过,但得到了相同的错误:/是的,我像你说的那样修改了它,我还打印了
self.AddEmployee.ID.get()
作为测试,并得到了正确的数据。我开始认为发生这个错误甚至不是我的错lol@Parfait它只是
ID
,但我只是将它改为
IDNumber
,这仍然给了我同样恼人的错误:(@Parfait,如果你愿意,请查看我的代码)-