sqlite3 .executemany:提供的绑定数不正确

时间:2017-09-24 18:51:56

标签: python sql python-3.x sqlite

我正在运行这一行:

    c.executemany('INSERT INTO frame VALUES (?,?)', list( ((f[0],), tuple(f[1])) )   )

这是f:('Constructed_Restraints', ['hogtie', 'hobble'])

所以这就是我的.executemany行的第二个参数:

[('Constructed_Restraints',), ('hogtie', 'hobble')]

但是,我收到了这个错误:

sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 2, and there are 1 supplied.

我已经尝试了各种各样的SO回答其他问题,但我继续得到这个错误。我怎么只提供1个绑定?该列表中有2个元组。

1 个答案:

答案 0 :(得分:1)

假设您希望在第二个字段中插入带有空值的两行,请尝试以下操作:

c.executemany('INSERT INTO frame VALUES (?,?)', list( ((f[0],None), tuple(f[1])) )

另一方面,如果您希望插入一行序列化值,请尝试:

c.execute('INSERT INTO frame VALUES (?,?)', (f[0], ','.join(f[1])) )

后者将在逗号分隔值语法中插入第二个值,这会引起规范化问题。超出这个范围可能需要数据库思考,但SQLite非常强大,因此查询问题可能就地处理(另一方面插入和更新异常是不同的)。