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
.