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

Truyền tham số sang DB .execute cho danh sách WHERE IN ... INT

Chỉnh sửa:Nếu bạn cho rằng câu trả lời này làm mất khả năng bảo vệ tích hợp chống lại cuộc tấn công SQL-injection thì bạn đã nhầm lẫn; xem xét kỹ hơn.

Thử nghiệm với pg8000 (giao diện Pure-Python tương thích với DB-API 2.0 cho công cụ cơ sở dữ liệu PostgreSQL):

Đây là cách được khuyến nghị để chuyển nhiều tham số vào mệnh đề "IN".

params = [3,2,1]
stmt = 'SELECT * FROM table WHERE id IN (%s)' % ','.join('%s' for i in params)
cursor.execute(stmt, params)

Ví dụ đầy đủ:

>>> from pg8000 import DBAPI
>>> conn = DBAPI.connect(user="a", database="d", host="localhost", password="p")
>>> c = conn.cursor()
>>> prms = [1,2,3]
>>> stmt = 'SELECT * FROM table WHERE id IN (%s)' % ','.join('%s' for i in prms)
>>> c.execute(stmt,prms)
>>> c.fetchall()
((1, u'myitem1'), (2, u'myitem2'), (3, u'myitem3'))


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Có gì mới trong PostgreSQL 12

  2. PostgreSQL:Thời gian tạo bảng

  3. In ra màn hình trong tệp .sql postgres

  4. postgresql - thay thế tất cả các trường hợp của một chuỗi trong trường văn bản

  5. postgresql:CHÈN VÀO ... (CHỌN * ...)