El método executemany(sql, seq_of_parameters)
ejecuta la misma instrucción SQL varias veces para un conjunto de parámetros. Por lo tanto, el segundo argumento, seq_of_parameters
, debe ser una secuencia de tuplas de parámetros, no solo una tupla de un solo parámetro:
cursor.executemany("update sampledata SET POS = ? where SRNO = ?", [(x[a], a)])
Si pasa solo una tupla, el cursor asumirá que el primer elemento, x[a]
, es una tupla de parámetros. Supongo que es una cadena de 50 caracteres y se interpreta como una secuencia de 50 parámetros, mientras que la cadena SQL solo espera 2.
Además, observe que usé ?
como símbolo de marcador de posición en lugar de %s
, ya que este último parece no ser compatible con PyODBC, ya que informó que esperaba 0 parámetros.
En su caso, es posible que desee utilizar execute()
método en el ciclo, ya que solo desea ejecutar la instrucción una vez por iteración:
cursor.execute("update sampledata SET POS = ? where SRNO = ?", (x[a], a))