Re: sentencia sql

Antoni Aloy <[email protected]>
Newsgroups gmane.comp.python.general.castellano
Message-ID <1252103613.8753.14.camel@localhost>
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

_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.