sql >> Databasteknik >  >> RDS >> Mysql

('SQL innehåller 0 parametermarkörer, men 50 parametrar tillhandahölls', 'HY000') eller TypeError:'tuple'-objektet kan inte anropas

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))



  1. Flera rangordnar i en tabell

  2. Hur flyttar jag zip-fil till blob-kolumn i Java?

  3. Rekursiv frågeutmaning - enkelt förälder/barn-exempel

  4. Kapslad JSON från 3 en-till-många-tabeller