Mysql
 sql >> Database >  >> RDS >> Mysql

("L'SQL contiene 0 indicatori di parametro, ma sono stati forniti 50 parametri", "HY000") o TypeError:l'oggetto "tuple" non è richiamabile

Il metodo executemany(sql, seq_of_parameters) esegue la stessa istruzione SQL più volte per un insieme di parametri. Pertanto, il secondo argomento, seq_of_parameters , deve essere una sequenza di tuple di parametri, non solo una singola tupla di parametri:

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

Se passi solo una tupla, il cursore assumerà che il primo elemento, x[a] , è una tupla di parametri. Immagino sia una stringa di 50 caratteri e venga interpretata come una sequenza di 50 parametri, mentre la stringa SQL ne prevede solo 2.

Inoltre, nota che ho usato ? come simbolo segnaposto invece di %s , poiché quest'ultimo sembra non essere supportato da PyODBC, poiché ha segnalato che prevedeva 0 parametri.

Nel tuo caso, potresti voler usare execute() metodo nel ciclo, poiché si desidera eseguire l'istruzione solo una volta per iterazione:

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