pythonsqlitesql-updateexecutemany

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


I have to update simple table using below expression:

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

Printing the content it gets:

('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'])

The error I get is:

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

I don't know how the program sees 10 values from 6 element list. Any ideas? The table is ok - inserting data one by one gives ok values. It looks

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

Solution

  • Your code would work if you used execute() and maybe this is what you want to do, but for executemany() you should use a tuple of tuples as the 2nd argument, because this is the point of executemany(), to execute the same statement many times and each time supply a different list of parameters:

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