无法在 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 的字符串。
我必须使用以下表达式更新简单 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 的字符串。