[pyar] Escapar parametros en consultas, MySQLdb

marrese en gmail.com marrese en gmail.com
Mar Feb 8 19:53:43 ART 2011


2011/2/8 Luis I. Facciolo <lifacciolo en gmail.com>:
> Podrias hacer algo asi:
> # si fuesen: primaryUsers = ["user1","user2","user3","user4","user5"]
> delete2 = "DELETE FROM Users where user NOT IN ( %s )" % (",".join(["'%s'" %
> user for user in primaryUsers]),)
>>>> output:
> "DELETE FROM Users where user NOT IN (
> 'user1','user2','user3','user4','user5' )"
> Saludos!
>

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)

-- 
Martín

http://www.kyheo.com.ar / http://blog.kyheo.com.ar
GTalk: marrese en gmail.com



More information about the pyar mailing list