无法在 python sqlite 中使用 "executemany" 更新 table

Can't update table using "executemany" in python sqlite

我必须使用以下表达式更新简单 table:

cur.executemany('UPDATE earths SET population=?, density=?, tilt=?, "land area"=?, dobe=?, livity=? WHERE sid=' + str(dc['sid']) + ' AND nr=' + str(dc['nr']), v)

正在打印它获取的内容:

('UPDATE earths SET population=?, density=?, tilt=?, "land area"=?, dobe=?, livity=? WHERE sid=15821 AND nr=8',
 ['1360425627', '2.79', '17.33', '486857065.504', '17.88371', '0.08'])

我得到的错误是:

ProgrammingError: Incorrect number of bindings supplied. The current statement uses 6, and there are 10 supplied.

我不知道程序如何从 6 元素列表中看到 10 个值。有任何想法吗? table 没问题 - 一个接一个地插入数据会给出好的值。看起来

UPDATE earths SET population=1360425627, density=2.79, tilt=17.33, "land area"=486857065.504, dobe=17.88371, livity=0.08 WHERE sid=15821 AND nr=8

如果你使用 execute() 你的代码会工作,也许这就是你想要做的,但是对于 executemany() 你应该使用元组的元组作为第二个参数,因为这是executemany() 点,多次执行相同的语句,每次提供不同的参数列表:

v = [('1360425627', '2.79', '17.33', '486857065.504', '17.88371', '0.08'),]
cur.executemany('UPDATE ...', v)

executemany 需要嵌套序列并将 v[0] 解释为要插入的第一个序列。

就好像你用过execute(..., v[0])

它说“提供了 10 个参数”,因为 v[0] 恰好是一个长度为 10 的字符串。