sentencia sql

Antoni Aloy subscripcions en trespams.com
Sab Sep 5 00:33:33 CEST 2009


El dv 04 de 09 de 2009 a les 10:58 -0500, en/na Otto Machado va
escriure:
> hola amigos
> 
> tengo una lista de elementos asi:
> 
> ['CRD', 'CID', 'ROD', 'BIL', "D'GER", 'EM', 'CD']
> 
> La consulta es
> 
> "SELECT ... FROM ... INNER JOIN .. ON (... = ...) WHERE n_given = \"%s\" " %(w)
> 
> donde w es cada elemento de la lista anterior
> 
> Cuando hago un debug me da error en el D’GER por el / supongo, este es el resultado del
> debug:
> 
> 'SELECT ... FROM ... INNER JOIN ... ON (... = ...) WHERE n_given = "D\'GER" '
> 
> Los demas los ejecuta bien, por favor respondanme en cuanto sepan alguna solucion
> gracias
> diana

Como ya te han contestado crear los sql como lo estás haciendo supone un
error de seguridad importante: http://xkcd.com/327/

Salvo que hiles muy fino, y dada la cantidad y calidad de los ORMs
actuales, mi consejo es que utilices uno de ellos en lugar de atacar vía
el db-api directamente: Django, Storm, Sqlobject, sqlalchemy, ..."
tienes donde elegir. Ventajas:

 * Te independizan de la BD
 * No necesitas (aunque puedes si es necesario) tratar con sql
 * Escapan los parámetros, evitando ataques de inyección de código sql.
 * Devuelven objetos Python, por lo que te ahorras la conversión a
mando, que siempre es tediosa.

Si aún así, necesitas forzosamente utilizar el DB-API y no utilizar un
ORM:

1. Utiliza los parámetros del execute. Es decir, en lugar de montar el
sql como una cadena, utiliza la parametrización que proporciona el
DB-API, esto resolverá los problemas de escapado de carácteres.

2. Si por lo que sea necesitas montar el sql a pelo, asegúrate de
escapar los datos antes de pasárselos, con el módulo Mysql me parece que
era con la función escape_string.

De las sentencias 

try:except

Es un no-no, las excepciones deben ser más explícitas, de este modo se
estaría obviando problemas y los errores podrían pasar desapercibidos.

Saludos,
-- 
Antoni Aloy López
http://trespams.com
http://apsl.net


------------ próxima parte ------------
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes


Más información sobre la lista de distribución Python-es