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