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