sql >> Base de Datos >  >> RDS >> Mysql

('El SQL contiene 0 marcadores de parámetros, pero se proporcionaron 50 parámetros', 'HY000') o TypeError:el objeto 'tuple' no se puede llamar

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