在python中将变量值传递给SQL时出现多个问题错误

时间:2019-03-18 14:16:55

标签: python mysql mysqli tkinter tkinter-entry

在设法将python tkinter中分配的变量的值传递到我设置的SQL数据库时,我设法树立了自己,这是我使用的代码:

        new_db, c = SetUpDataBase()
        FirstName = entry1.get()
        LastName =entry2.get()
        DoB =entry3.get()
        Gender =entry4.get()
        MobileNo =entry5.get()
        HomeNo =entry6.get()
        Email =entry7.get()

然后是execute语句:

       c.executescript('''INSERT INTO Patients (Last_Name, First_Name, Date_of_Birth, Gender,
                        Home_Phone_Number, Mobile_Phone_Number, Email) VALUES(?,?,?,?,?,?,?) ''',(LastName,FirstName,DoB,Gender,HomeNo,MobileNo,Email))

这导致出现错误消息:

Home_Phone_Number, Mobile_Phone_Number, Email) VALUES(?,?,?,?,?,?,?) ''',(LastName,FirstName,DoB,Gender,HomeNo,MobileNo,Email))

TypeError:函数正好采用1个参数(给定2个参数)

以及有关如何解决此问题的想法?

谢谢

2 个答案:

答案 0 :(得分:0)

如果您查看executescript的文档,则会看到它只有一个参数:要运行的脚本。您为它传递了两个参数:要运行的脚本和元组。 executescript不像其他数据库方法那样采用参数替换。

解决方案是使用execute而不是executescript

答案 1 :(得分:0)

我和@Bryan Dakley在一起,这里有个例子,您难道不想每次都计算字段数吗? ;)

args = (LastName,FirstName,DoB,Gender,HomeNo,MobileNo,Email)

sql = "INSERT INTO Patients VALUES(%s)"%(",".join("?"*len(args)))

c.execute(sql, args)