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))