PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Übergeben von Parametern an DB .execute für WHERE IN... INT-Liste

Bearbeiten:Wenn Sie glauben, dass diese Antwort den integrierten Schutz vor SQL-Injection-Angriffen umgeht, irren Sie sich; schau mal genauer hin.

Testen mit pg8000 (eine DB-API 2.0-kompatible Pure-Python-Schnittstelle zur PostgreSQL-Datenbank-Engine):

Dies ist die empfohlene Methode, um mehrere Parameter an eine "IN"-Klausel zu übergeben.

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

Vollständiges Beispiel:

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