O método
executemany(sql, seq_of_parameters) executa a mesma instrução SQL várias vezes para um conjunto de parâmetros. Portanto, o segundo argumento, seq_of_parameters , deve ser uma sequência de tuplas de parâmetro, não apenas uma única tupla de parâmetro:cursor.executemany("update sampledata SET POS = ? where SRNO = ?", [(x[a], a)])
Se você passar apenas uma tupla, o cursor assumirá que o primeiro item,
x[a] , é uma tupla de parâmetros. Eu acho que é uma string de 50 caracteres e é interpretada como uma sequência de 50 parâmetros, enquanto a string SQL espera apenas 2. Além disso, observe que usei
? como símbolo de espaço reservado em vez de %s , já que o último parece não ser suportado pelo PyODBC, pois relatou que esperava 0 parâmetros. No seu caso, você pode querer usar o
execute() no loop, já que você deseja executar a instrução apenas uma vez por iteração:cursor.execute("update sampledata SET POS = ? where SRNO = ?", (x[a], a))