Mysql
 sql >> Base de données >  >> RDS >> Mysql

Quelle est la meilleure stratégie de caractère d'échappement pour le combo Python/MySQL ?

Voici un exemple :

import MySQLdb
column = str(MySQLdb.escape_string(row[1]))
query = "update myTable set %(column)s = %%s where ID = %%s" % dict(column = column) 
cursor2.execute(query, [row[3], row[0]])

Mettre à jour

Voici un bref commentaire :

column = str(MySQLdb.escape_string(row[1]))

C'est toujours une bonne idée d'échapper à tout ce qui entre dans une requête. Dans ce cas, nous ajoutons dynamiquement un nom de colonne et il doit donc être échappé avant l'exécution de la requête.

query = "update myTable set %(column)s = %%s where ID = %%s" % dict(column = column) 

Je forme la requête ici. J'essaie de réaliser deux choses :(1) formez une requête avec le nom de colonne renseigné à l'aide de la column variable déclarée à la ligne précédente (2) ajoute des espaces réservés qui seront remplis par les paramètres réels lors de l'exécution de la requête.

L'extrait dict(column = column) est en fait une autre façon de créer le dictionnaire {'column': column} . Ceci est rendu possible en utilisant le dict constructeur. Je ne veux pas remplir les autres espaces réservés pour l'instant donc je leur échappe en utilisant deux signes de pourcentage (%% ).

cursor2.execute(query, [row[3], row[0]])

Exécutez enfin la requête. Si vous imprimez la requête avant de l'exécuter, vous verrez la chaîne update myTable set column_name = %s where ID = %s .