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