Mysql
 sql >> Base de données >  >> RDS >> Mysql

('Le SQL contient 0 marqueurs de paramètre, mais 50 paramètres ont été fournis', 'HY000') ou TypeError :l'objet 'tuple' n'est pas appelable

La méthode executemany(sql, seq_of_parameters) exécute plusieurs fois la même instruction SQL pour un ensemble de paramètres. Par conséquent, le deuxième argument, seq_of_parameters , doit être une séquence de tuples de paramètres, pas juste un seul tuple de paramètre :

cursor.executemany("update sampledata SET POS = ? where SRNO = ?", [(x[a], a)])

Si vous passez un seul tuple, le curseur supposera que le premier élément, x[a] , est un tuple de paramètres. Je suppose que c'est une chaîne de 50 caractères et qu'elle est interprétée comme une séquence de 50 paramètres, alors que la chaîne SQL n'en attend que 2.

De plus, remarquez que j'ai utilisé ? comme symbole d'espace réservé au lieu de %s , car ce dernier ne semble pas pris en charge par PyODBC, car il a indiqué qu'il attendait 0 paramètre.

Dans votre cas, vous voudrez peut-être utiliser le execute() méthode dans la boucle, puisque vous ne voulez exécuter l'instruction qu'une seule fois par itération :

cursor.execute("update sampledata SET POS = ? where SRNO = ?", (x[a], a))