Il y a beaucoup de fonctions d'échappement dans le module mysqldb de Python dont je ne comprends pas la documentation, et mes efforts pour les rechercher n'ont rien révélé.Documentation mysqldb obscure de Python
>>> 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 dit la même chose. Mais qu'est-ce qui est supposé être dans ce "dict dicté"? J'ai essayé quelques trucs (la plupart du temps au hasard) et je n'ai que des erreurs. Ce qui est encore plus frustrant est que, alors que la méthode fonctionne escape_string()
, sa chaîne de documentation est:
>>> 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.
Alors, je suis mieux à l'aide _mysql.escape()
, suis-je? Eh bien, d'accord, mais comment? Que diable est ce "dict dicté"? PHP, de cette façon au moins, était beaucoup moins cryptique.
J'ai essayé votre évasion avec le nom de Little Bobby Tables, et cela a fonctionné. Mais, savoir que 'cursor.execute()' échappe automatiquement est également rassurant. Est-ce dans cette page de documentation liée à David Zaslavsky? Je ne l'ai pas vu là-bas ... Mais j'ai peut-être manqué ça. – eje211
Si vous lisez la bande XKCD, le nom actuel de Bobby Tables est: "Robert"); DROP TABLE Students; - ". C'est un nom effrayant à mettre dans une base de données. Mais un bon cas de test. – eje211
@ eje211: Votre question concernant l'endroit où la documentation explique la citation automatique des paramètres est une bonne question. Le meilleur que j'ai pu trouver est: 'Le client ne devrait pas être obligé de" s'échapper "de la valeur pour pouvoir l'utiliser', voir http://www.python.org/dev/peps/pep-0249/. – unutbu