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

API cơ sở dữ liệu:Cách đối phó với điều kiện multi where trong Python

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để thêm một cụm trên khóa tổng hợp?

  2. Chuyển hướng đến url trong tab mới từ mã plsql

  3. Oracle BLOB đến base64 CLOB

  4. Chỉ mục được phân vùng toàn cầu có tốt hơn (nhanh hơn) so với chỉ mục không được phân vùng không?

  5. cách lấy cột rowNum trong sqlite IPHONE