Metode executemany(sql, seq_of_parameters) mengeksekusi pernyataan SQL yang sama beberapa kali untuk satu set parameter. Oleh karena itu, argumen kedua, seq_of_parameters , harus berupa urutan tupel parameter, bukan hanya tupel parameter tunggal:
cursor.executemany("update sampledata SET POS = ? where SRNO = ?", [(x[a], a)])
Jika Anda melewatkan hanya satu tupel, kursor akan menganggap bahwa item pertama, x[a] , adalah tupel parameter. Saya kira itu adalah string 50 karakter dan ditafsirkan sebagai urutan 50 parameter, sedangkan string SQL hanya mengharapkan 2.
Selanjutnya, perhatikan bahwa saya menggunakan ? sebagai simbol placeholder alih-alih %s , karena yang terakhir tampaknya tidak didukung oleh PyODBC, karena dilaporkan bahwa ia mengharapkan 0 parameter.
Dalam kasus Anda, Anda mungkin ingin menggunakan execute() metode dalam loop, karena Anda hanya ingin menjalankan pernyataan sekali per iterasi:
cursor.execute("update sampledata SET POS = ? where SRNO = ?", (x[a], a))