Metoden executemany(sql, seq_of_parameters)
kör samma SQL-sats flera gånger för en uppsättning parametrar. Därför, det andra argumentet, seq_of_parameters
, måste vara en sekvens av parametertupler, inte bara en enskild parametertuppel:
cursor.executemany("update sampledata SET POS = ? where SRNO = ?", [(x[a], a)])
Om du bara passerar en tupel, kommer markören att anta att det första objektet, x[a]
, är en tupel av parametrar. Jag antar att det är en sträng på 50 tecken och tolkas som en sekvens av 50 parametrar, medan SQL-strängen bara förväntar sig 2.
Lägg dessutom märke till att jag använde ?
som platshållarsymbol istället för %s
, eftersom det senare verkar inte stöds av PyODBC, eftersom det rapporterade att det förväntade sig 0 parametrar.
I ditt fall kanske du vill använda execute()
metod i loopen, eftersom du bara vill köra satsen en gång per iteration:
cursor.execute("update sampledata SET POS = ? where SRNO = ?", (x[a], a))