[pyar] Escapar parametros en consultas, MySQLdb

Ricardo Aráoz ricaraoz en gmail.com
Mie Feb 9 09:44:28 ART 2011


On 08/02/2011 07:53 p.m., marrese en gmail.com wrote:
> SI no me equivoco hacer el join de la lista de valores de esa forma
> deja abierta la posibilidad a un injection. Si alguno de los valores
> tiene una ' entre medio no es escapada.
>
> Si usas MySQL o SQLite3 (los unicos que probe con python) podes dejar
> que el mismo modulo se encargue de escapar los valores
>
> Quizas lo que haria seria algo del estilo
>
> primaryUsers = ["user1","user2","user3","user4","user5"]
> in_cond = [ '%s' for a in range(len(primaryUsers)) ]
>
> sql = 'DELETE FROM users WHERE user NOT IN (%s)' % (','.join(in_cond),)
> cur.execute(sql, primaryUsers)

+1

Podrías ahorrarte un ciclo o dos haciendo directamente (los llamados a 
range() y a len() y la generación de una lista son innecesarios) :

in_cond = ', '.join('%s' for a in primaryUsers)







More information about the pyar mailing list