【问题标题】:passing a tuple in function在函数中传递一个元组
【发布时间】:2018-12-24 13:31:58
【问题描述】:

我回答了一些问题,但我的情况我想不通

我写了一个函数,它接受一个元组作为参数并执行这个:

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

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

add_subject(self.page1.student_name, data)

data 是那里的元组。

错误是:

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

我在使用的时候试过拆包,还是报错:

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

错误:

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

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

【问题讨论】:

  • data的值是多少?
  • 你有没有在不开箱的情况下尝试过? IIRC 你不需要在执行中解包
  • 是的,我试过了,但错误仍然是 sqlite3.InterfaceError: Error binding parameter 0 - 可能是不受支持的类型。

标签: python tkinter sqlite


【解决方案1】:

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

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

【讨论】:

  • 我也这么认为,但我得到了错误:> sqlite3.InterfaceError: Error binding parameter 0 - 可能是不支持的类型。
  • 表列的数据类型和元组中的值是什么?
【解决方案2】:

您已将参数data 声明为位置参数,但只传递了一个参数data。这意味着最终参数将是(data,)。您需要在传递时解包元组以填充位置参数。

add_subject(self.page1.student_name, *data)

【讨论】:

  • 但这仍然会给我 TypeError: add_subject() 接受 2 个位置参数但给出了 9 个
  • 不是你定义它的方式。签名接受 1 到 255 个参数。
猜你喜欢
  • 2020-11-24
  • 2018-03-29
  • 1970-01-01
  • 1970-01-01
  • 2012-08-14
  • 2020-10-17
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
相关资源
最近更新 更多