在函数中传递元组

时间:2018-07-16 23:37:56

标签: python tkinter sqlite

我遇到了问题,但我无法解决

我编写了一个以元组为参数并执行此操作的函数:

def add_subject(name_stud, *data):
    c.execute("INSERT INTO " + name_stud + " VALUES (?,?,?,?,?,?,?,?)", 
             data)
    conn.commit()

我尝试在通过元组作为参数的类方法中调用此函数,但出现错误

add_subject(self.page1.student_name, data)

数据是那里的元组。

,错误是:

  

sqlite3.ProgrammingError:提供的绑定数不正确。当前语句使用8,并且提供了1。

在使用时我尝试打开包装,但仍然出现错误:

def add_subject(name_stud, data):
    c.execute("INSERT INTO " + name_stud + " VALUES (?,?,?,?,?,?,?,?)", 
              *data)
    conn.commit()

错误:

  

sqlite3.InterfaceError:绑定参数0出错-类型可能不受支持。

其他人的回答没有帮助我。 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您已将参数data声明为位置args,但仅传递了一个参数data。这意味着最终参数将为(data,)。您需要在通过时打开元组的包装,以填充位置args。

add_subject(self.page1.student_name, *data)

答案 1 :(得分:1)

由于将元组作为单个参数传递,因此不应在函数定义中编写*data。只需将其声明为普通函数参数即可。

def add_subject(name_stud, data):
    row = data
    c.execute("INSERT INTO " + name_stud + " VALUES (?,?,?,?,?,?,?,?)", 
             data)
    conn.commit()