Metoda executemany(sql, seq_of_parameters) provede stejný příkaz SQL několikrát pro sadu parametrů. Proto druhý argument, seq_of_parameters , musí být posloupnost n-tic parametrů, nikoli pouze n-tice s jedním parametrem:
cursor.executemany("update sampledata SET POS = ? where SRNO = ?", [(x[a], a)])
Pokud předáte pouze jednu n-tici, kurzor bude předpokládat, že první položka, x[a] , je n-tice parametrů. Myslím, že je to řetězec 50 znaků a je interpretován jako sekvence 50 parametrů, zatímco řetězec SQL očekává pouze 2.
Dále si všimněte, že jsem použil ? jako zástupný symbol namísto %s , protože se zdá, že PyODBC nepodporuje PyODBC, protože hlásil, že očekával 0 parametrů.
Ve vašem případě možná budete chtít použít execute() metodu ve smyčce, protože chcete příkaz spustit pouze jednou za iteraci:
cursor.execute("update sampledata SET POS = ? where SRNO = ?", (x[a], a))