Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

('SQL berisi 0 penanda parameter, tetapi 50 parameter disediakan', 'HY000') atau TypeError:objek 'tuple' tidak dapat dipanggil

Metode executemany(sql, seq_of_parameters) mengeksekusi pernyataan SQL yang sama beberapa kali untuk satu set parameter. Oleh karena itu, argumen kedua, seq_of_parameters , harus berupa urutan tupel parameter, bukan hanya tupel parameter tunggal:

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

Jika Anda melewatkan hanya satu tupel, kursor akan menganggap bahwa item pertama, x[a] , adalah tupel parameter. Saya kira itu adalah string 50 karakter dan ditafsirkan sebagai urutan 50 parameter, sedangkan string SQL hanya mengharapkan 2.

Selanjutnya, perhatikan bahwa saya menggunakan ? sebagai simbol placeholder alih-alih %s , karena yang terakhir tampaknya tidak didukung oleh PyODBC, karena dilaporkan bahwa ia mengharapkan 0 parameter.

Dalam kasus Anda, Anda mungkin ingin menggunakan execute() metode dalam loop, karena Anda hanya ingin menjalankan pernyataan sekali per iterasi:

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. Bagaimana cara menghapus semua karakter numerik non-alfa dari string di MySQL?

  2. Mencoba mengatur nilai kotak centang default jika tidak dicentang

  3. INSERT .. SELECT dengan beberapa nilai default di MySQL dengan JOOQ

  4. Tidak dapat membuka JPA EntityManager untuk transaksi; pengecualian bersarang adalah javax.persistence.PersistenceException

  5. Optimalkan iterasi melalui array menggunakan loop foreach