Metoda executemany(sql, seq_of_parameters)
wykonuje wielokrotnie tę samą instrukcję SQL dla zestawu parametrów. Dlatego drugi argument, seq_of_parameters
, musi być sekwencją krotek parametrów, a nie tylko pojedynczą krotką parametrów:
cursor.executemany("update sampledata SET POS = ? where SRNO = ?", [(x[a], a)])
Jeśli przekażesz tylko jedną krotkę, kursor przyjmie, że pierwszy element, x[a]
, jest krotką parametrów. Myślę, że jest to ciąg 50 znaków i jest interpretowany jako sekwencja 50 parametrów, podczas gdy ciąg SQL oczekuje tylko 2.
Co więcej, zauważ, że użyłem ?
jako symbol zastępczy zamiast %s
, ponieważ ten ostatni wydaje się nie być obsługiwany przez PyODBC, ponieważ poinformował, że oczekuje 0 parametrów.
W twoim przypadku możesz użyć execute()
w pętli, ponieważ chcesz uruchomić instrukcję tylko raz na iterację:
cursor.execute("update sampledata SET POS = ? where SRNO = ?", (x[a], a))