Python équivalent de mysql_real_escape_string, pour obtenir des chaînes en toute sécurité dans MySQL?
Est-il un Python équivalent de PHP mysql_real_escape_string
?
J'essaie d'insérer des chaînes de caractères dans une base MySQL directement à partir de Python, et continue de recevoir fauché par des guillemets dans les cordes.
mysql_string = "INSERT INTO candidate (name, address) VALUES "
for k, v in v_dict.iteritems():
mysql_string += " ('" + v_dict['name'] + "', '" + v_dict['address'] + "'), "
mysql_string += ";"
cursor.execute(mysql_string)
J'ai essayé re.escape()
mais qui échappe à tout caractère non alphanumérique dans les cordes, ce qui n'est pas ce dont j'ai besoin - j'ai juste besoin d'échapper les apostrophes dans cette instance (et plus généralement tout ce qui pourrait le voyage jusqu'à MySQL).
Pourrait le faire manuellement, je suppose, mais est-il une façon plus intelligente de le faire en Python?
source d'informationauteur AP257 | 2010-04-01
Vous devez vous connecter pour publier un commentaire.
Si vous utilisez mysql-python, juste essayer de
Exemple
devrait faire ce que votre code s'affiche pour tenter -- insertion de la même des valeurs identiques N fois (vous êtes en boucle sur
v_dict.iteritems()
mais en ignorant complètement les variables de boucle, et au lieu simplement de réutiliser ces deux valeurs dev_dict
à chaque fois). Bien sûr, si vous voulez dire quelque chose de complètement différent de la deuxième ligne devra être modifié en conséquence, mais l'idée essentielle de toute façon est d'utiliser des espaces réservés, pas de chaîne de formatage, pour de telles tâches.Oui, c'est
escape_string
sur la base de données connexion objet.Pas
escape_string
sur leMySQLdb
module, ce qui est équivalent àmysql_escape_string
en PHP, et a le même potentiel de vulnérabilité avec les jeux de caractères multioctets. Vous ne devriez pas utiliserMySQLdb.escape_string
.Dans tous les cas, vous êtes beaucoup mieux d'utiliser de paramétrer des requêtes comme dans d'Alex réponse. Cela rend plus facile de port à d'autres bases de données (c'est une partie de la DB-API standard, qui
escape_string
ne l'est pas), et il est généralement plus commode. (Et beaucoup plus pratique que le paramétrage est en PHP.)Dans ce cas particulier, vous avez juste besoin d'utiliser executemany méthode du curseur.
MySQLdb.escape_string
est équivalent. Tout cela est décrit dans la documentation.à côté de
MySQLdb.escape_string(SQL)
pymysql bibliothèque python également fournirescape_string()
fonction.