Методът 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))