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