编辑:如果您认为这个答案绕过了针对 SQL 注入攻击的内置保护,那么您就错了;仔细看。
使用pg8000(与 PostgreSQL 数据库引擎的 DB-API 2.0 兼容的 Pure-Python 接口)进行测试:
这是将多个参数传递给“IN”子句的推荐方法。
params = [3,2,1]
stmt = 'SELECT * FROM table WHERE id IN (%s)' % ','.join('%s' for i in params)
cursor.execute(stmt, params)
完整示例:
>>> 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'))