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))