Bạn cần sử dụng các tham số SQL cho mỗi giá trị.
Đối với in
, điều đó có nghĩa là bạn cần tạo các tham số:
sql = 'select * from tbl where params1=:params1 and params2=:params2 and params3 in ({})'.format(
', '.join(['params3_' + str(i) for i in range(len(params3_value))])
trong đó tôi giả sử rằng params3_value
là danh sách các giá trị để kiểm tra params3
chống lại. Nếu params3_value
là 3 phần tử (như ['v1', 'v2', 'v3']
) thì SQL được tạo sẽ giống như sau:
select * from tbl where params1=:params1 and params2=:params2 and params3 in (:params3_0, :params3_1, :params3_2)
Sau đó chuyển các tham số đó vào cursor.execute()
gọi:
params = {'params1': params1_value, 'params2': params2_value}
for i, val in enumerate(params3_value):
params['params3_' + str(i)] = value
cursor.execute(sql, {params})
Tôi đã sử dụng :name
được đặt tên là kiểu tham số SQL ở đây vì đó là những gì cx_Oracle
sử dụng. Tham khảo tài liệu trình kết nối cơ sở dữ liệu của bạn để biết các kiểu thông số được hỗ trợ chính xác.
:named
Kiểu tham số SQL được đặt tên yêu cầu bạn chuyển các tham số dưới dạng từ điển, vì vậy đoạn mã trên tạo các khóa phù hợp cho params3_value
các mặt hàng.