Mysql
 sql >> Datenbank >  >> RDS >> Mysql

('Die SQL enthält 0 Parametermarkierungen, aber es wurden 50 Parameter angegeben', 'HY000') oder TypeError:'tuple'-Objekt ist nicht aufrufbar

Die Methode executemany(sql, seq_of_parameters) führt dieselbe SQL-Anweisung mehrmals für einen Parametersatz aus. Daher das zweite Argument, seq_of_parameters , muss eine Folge von Parametertupeln sein, nicht nur ein einzelnes Parametertupel:

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

Wenn Sie nur ein Tupel übergeben, nimmt der Cursor an, dass das erste Element x[a] ist , ist ein Tupel von Parametern. Ich schätze, es ist ein String mit 50 Zeichen und wird als Folge von 50 Parametern interpretiert, während der SQL-String nur 2 erwartet.

Beachten Sie außerdem, dass ich ? verwendet habe als Platzhaltersymbol anstelle von %s , da letzteres von PyODBC nicht unterstützt zu werden scheint, da es berichtete, dass es 0 Parameter erwartet.

In Ihrem Fall möchten Sie vielleicht execute() verwenden -Methode in der Schleife, da Sie die Anweisung nur einmal pro Iteration ausführen möchten:

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