sql >> Databáze >  >> RDS >> PostgreSQL

Předání parametru do DB .execute pro seznam WHERE IN... INT

Edit:Pokud si myslíte, že tato odpověď obchází vestavěné ochrany proti útoku SQL-injection, jste na omylu; podívejte se pozorněji.

Testování s pg8000 (rozhraní Pure-Python kompatibilní s DB-API 2.0 k databázovému stroji PostgreSQL):

Toto je doporučený způsob předání více parametrů do klauzule "IN".

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

Úplný příklad:

>>> 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. Jak vložit dlouhý řetězec do datového typu CLOB v Oracle

  2. Jak funguje funkce WEIGHT_STRING() v MySQL

  3. Funkce NULLIF() v Oracle

  4. Vysvětlení velikostí úložiště pro typy dat MySQL TEXT