PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Passage de param à DB .execute pour WHERE IN... INT list

Edit :si vous pensez que cette réponse contourne les protections intégrées contre les attaques par injection SQL, vous vous trompez ; regardez de plus près.

Test avec pg8000 (une interface Pure-Python compatible DB-API 2.0 vers le moteur de base de données PostgreSQL) :

Il s'agit de la méthode recommandée pour transmettre plusieurs paramètres à une clause "IN".

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

Exemple complet :

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