Методът executemany(sql, seq_of_parameters) изпълнява един и същ SQL израз многократно за набор от параметри. Следователно, вторият аргумент, seq_of_parameters , трябва да бъде поредица от кортежи с параметри, а не само един кортеж с параметри:
cursor.executemany("update sampledata SET POS = ? where SRNO = ?", [(x[a], a)])
Ако подадете само един кортеж, курсорът ще приеме, че първият елемент, x[a] , е набор от параметри. Предполагам, че това е низ от 50 знака и се интерпретира като поредица от 50 параметъра, докато SQL низът очаква само 2.
Освен това забележете, че използвах ? като символ за заместител вместо %s , тъй като последното изглежда не се поддържа от PyODBC, тъй като съобщи, че очаква 0 параметри.
Във вашия случай може да искате да използвате execute() метод в цикъла, тъй като искате да изпълнявате оператора само веднъж на итерация:
cursor.execute("update sampledata SET POS = ? where SRNO = ?", (x[a], a))