Hay muchas funciones de escape en el módulo de Python mysqldb cuya documentación no entiendo, y mis esfuerzos por buscarlas no han revelado nada.Documentación oculta de Python mysqldb
>>> print _mysql.escape.__doc__
escape(obj, dict) -- escape any special characters in object obj
using mapping dict to provide quoting functions for each type.
Returns a SQL literal string.
This documentation page dice lo mismo. ¿Pero qué se supone que es en ese "dict mapping"? Intenté un par de cosas (en su mayoría al azar) y solo recupero los errores. Lo que es aún más frustrante es que, mientras que el método funciona escape_string()
, su cadena de documentación es:
>>> print _mysql.escape_string.__doc__
escape_string(s) -- quote any SQL-interpreted characters in string s.
Use connection.escape_string(s), if you use it at all.
_mysql.escape_string(s) cannot handle character sets. You are
probably better off using connection.escape(o) instead, since
it will escape entire sequences as well as strings.
lo tanto, estoy mejor de usar _mysql.escape()
, ¿verdad? Bueno, eh ... está bien, pero ¿cómo? ¿Qué demonios es ese "dict mapping"? PHP, al menos de esa manera, era mucho menos críptico.
Intenté escapar con el nombre de Little Bobby Tables, y funcionó. Pero, sabiendo que 'cursor.execute()' escapa automáticamente también es tranquilizador. ¿Está en esa página de documentación vinculada a David Zaslavsky? No lo vi allí ... Pero puede que me lo haya perdido. – eje211
Si lee la tira XKCD, el nombre real de Bobby Tables es: "Robert"); Estudiantes DROP TABLE; - ". Ese es un nombre aterrador para poner en una base de datos. Pero un buen caso de prueba. – eje211
@ eje211: Su pregunta con respecto a en qué parte de la documentación explica la cotización automática de los parámetros es buena. Lo mejor que he podido encontrar es 'No se le debe exigir al cliente que" escape "el valor para que pueda ser utilizado. Consulte http://www.python.org/dev/peps/pep-0249/. – unutbu