sql >> Database >  >> RDS >> Mysql

('De SQL bevat 0 parametermarkeringen, maar er zijn 50 parameters opgegeven', 'HY000') of TypeError:'tuple' object kan niet worden aangeroepen

De methode executemany(sql, seq_of_parameters) voert dezelfde SQL-instructie meerdere keren uit voor een set parameters. Daarom is het tweede argument, seq_of_parameters , moet een reeks parameter-tupels zijn, niet slechts een enkele parameter-tupel:

cursor.executemany("update sampledata SET POS = ? where SRNO = ?", [(x[a], a)])

Als u slechts één tupel doorgeeft, gaat de cursor ervan uit dat het eerste item, x[a] , is een tupel van parameters. Ik denk dat het een reeks van 50 tekens is en wordt geïnterpreteerd als een reeks van 50 parameters, terwijl de SQL-reeks er slechts 2 verwacht.

Merk verder op dat ik ? . heb gebruikt als het tijdelijke aanduiding-symbool in plaats van %s , aangezien de laatste niet lijkt te worden ondersteund door PyODBC, omdat het meldde dat het 0 parameters verwachtte.

In jouw geval wil je misschien de execute() . gebruiken methode in de lus, aangezien u de instructie slechts één keer per iteratie wilt uitvoeren:

cursor.execute("update sampledata SET POS = ? where SRNO = ?", (x[a], a))



  1. Vind alle wedstrijden voor een bepaald team in PostgreSQL

  2. hoe tekst uit een pdf-bestand te halen en op te slaan in DB

  3. SQL-query voor GROUP BY, retourneert groepen die voldoen aan de voorwaarden van LEAST, COALESCE

  4. Dag toevoegen aan tijdstempel