Mysql
 sql >> Baza danych >  >> RDS >> Mysql

('SQL zawiera 0 znaczników parametrów, ale podano 50 parametrów', 'HY000') lub TypeError:obiekt 'tuple' nie jest wywoływalny

Metoda executemany(sql, seq_of_parameters) wykonuje wielokrotnie tę samą instrukcję SQL dla zestawu parametrów. Dlatego drugi argument, seq_of_parameters , musi być sekwencją krotek parametrów, a nie tylko pojedynczą krotką parametrów:

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

Jeśli przekażesz tylko jedną krotkę, kursor przyjmie, że pierwszy element, x[a] , jest krotką parametrów. Myślę, że jest to ciąg 50 znaków i jest interpretowany jako sekwencja 50 parametrów, podczas gdy ciąg SQL oczekuje tylko 2.

Co więcej, zauważ, że użyłem ? jako symbol zastępczy zamiast %s , ponieważ ten ostatni wydaje się nie być obsługiwany przez PyODBC, ponieważ poinformował, że oczekuje 0 parametrów.

W twoim przypadku możesz użyć execute() w pętli, ponieważ chcesz uruchomić instrukcję tylko raz na iterację:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie można modyfikować informacji nagłówka

  2. Zapytanie składające MySQL, uporządkowanie według 2 zmiennych

  3. Kilka ostrzeżeń [oczekuje parametru]

  4. apostrof podczas wstawiania (Mysql)

  5. VBA - otrzymuję błąd „mysql server is --read-only”, ale tylko podczas korzystania z RecordSet