Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

('SQL chứa 0 dấu tham số, nhưng 50 tham số đã được cung cấp', 'HY000') hoặc TypeError:đối tượng 'tuple' không thể gọi được

Phương thức executemany(sql, seq_of_parameters) thực thi cùng một câu lệnh SQL nhiều lần cho một tập hợp các tham số. Do đó, đối số thứ hai, seq_of_parameters , phải là một chuỗi các bộ tham số, không chỉ là một bộ tham số duy nhất:

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

Nếu bạn chỉ vượt qua một bộ giá trị, con trỏ sẽ giả định rằng mục đầu tiên, x[a] , là một bộ tham số. Tôi đoán nó là một chuỗi 50 ký tự và được hiểu là một chuỗi 50 tham số, trong khi chuỗi SQL chỉ mong đợi 2.

Hơn nữa, hãy lưu ý rằng tôi đã sử dụng ? làm biểu tượng trình giữ chỗ thay vì %s , vì thứ hai dường như không được PyODBC hỗ trợ, vì nó đã báo cáo rằng nó mong đợi 0 tham số.

Trong trường hợp của bạn, bạn có thể muốn sử dụng execute() trong vòng lặp, vì bạn chỉ muốn chạy câu lệnh một lần cho mỗi lần lặp:

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. Truy vấn chọn đơn giản của MySQL chậm

  2. Một tập lệnh PHP có thể được chạy thường xuyên trên máy chủ mà không có yêu cầu từ máy khách không?

  3. symfony2 with theory không thể kết nối với cơ sở dữ liệu mysql từ xa

  4. Biểu mẫu PHP trả về Thông báo:Chuyển đổi mảng thành chuỗi

  5. MySQL error 10061