Muchas maneras. NO use el más obvio ( %s
con %
) en código real, está abierto a ataques .
Aquí copiar y pegar desde pydoc de sqlite3 :
# Never do this -- insecure!
symbol = 'RHAT'
c.execute("SELECT * FROM stocks WHERE symbol = '%s'" % symbol)
# Do this instead
t = ('RHAT',)
c.execute('SELECT * FROM stocks WHERE symbol=?', t)
print c.fetchone()
# Larger example that inserts many records at a time
purchases = [('2006-03-28', 'BUY', 'IBM', 1000, 45.00),
('2006-04-05', 'BUY', 'MSFT', 1000, 72.00),
('2006-04-06', 'SELL', 'IBM', 500, 53.00),
]
c.executemany('INSERT INTO stocks VALUES (?,?,?,?,?)', purchases)
Más ejemplos si lo necesita:
# Multiple values single statement/execution
c.execute('SELECT * FROM stocks WHERE symbol=? OR symbol=?', ('RHAT', 'MSO'))
print c.fetchall()
c.execute('SELECT * FROM stocks WHERE symbol IN (?, ?)', ('RHAT', 'MSO'))
print c.fetchall()
# This also works, though ones above are better as a habit as it's inline with syntax of executemany().. but your choice.
c.execute('SELECT * FROM stocks WHERE symbol=? OR symbol=?', 'RHAT', 'MSO')
print c.fetchall()
# Insert a single item
c.execute('INSERT INTO stocks VALUES (?,?,?,?,?)', ('2006-03-28', 'BUY', 'IBM', 1000, 45.00))
%
. De hecho, lo digo en la respuesta.%
lugar de,
entre la cadena y las variables ... no puedo deshacer mi voto en contra debido a varias razones ... personalmente me gustaría ver palabras como inseguro / ataque, etc.en la descripción donde dices don 't use%
..%
operador para formatear la cadena. Los que están%
en la cadena están siendo utilizadoscursor.execute
directamente y, dado que sabe que está generando SQL, puede hacer más para protegerlo.