sql >> Databasteknik >  >> RDS >> PostgreSQL

Skickar param till DB .execute för WHERE IN... INT-listan

Edit:Om du tror att det här svaret kringgår de inbyggda skydden mot SQL-injektionsattacker har du fel; titta närmare.

Testa med pg8000 (ett DB-API 2.0-kompatibelt Pure-Python-gränssnitt till PostgreSQL-databasmotorn):

Detta är det rekommenderade sättet att skicka flera parametrar till en "IN"-sats.

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

Fullständigt exempel:

>>> 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. Hur man läser MySQL binära loggfiler (BinLog) med mysqlbinlog

  2. Vad är skillnaden mellan VARCHAR och CHAR?

  3. Jämför failover-tider för Amazon Aurora, Amazon RDS och ClusterControl

  4. Oracle-sekvens men då i MS SQL Server