Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

('O SQL contém 0 marcadores de parâmetro, mas 50 parâmetros foram fornecidos', 'HY000') ou TypeError:o objeto 'tuple' não pode ser chamado


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