Aquí se muestra un ejemplo:
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]])
actualización
He aquí un breve comentario:
column = str(MySQLdb.escape_string(row[1]))
siempre una buena idea para escapar de todo lo que entra en una consulta. En este caso, estamos agregando dinámicamente un nombre de columna y, por lo tanto, debe escaparse antes de que se ejecute la consulta.
query = "update myTable set %(column)s = %%s where ID = %%s" % dict(column = column)
Formulo la consulta aquí. Estoy tratando de lograr dos cosas: (1) formar una consulta con el nombre de columna rellenada usando la variable column
declarada en la línea anterior (2) agregar marcadores de posición que serán completados por parámetros reales durante la ejecución de la consulta.
El fragmento dict(column = column)
es en realidad otra forma de crear el diccionario {'column': column}
. Esto es posible usando el constructor dict. No quiero completar el resto de los titulares de lugar, así que los escapo usando dos signos de porcentaje (%%
).
cursor2.execute(query, [row[3], row[0]])
Finalmente, ejecute la consulta. Si imprime una consulta antes de ejecutar, verá la cadena update myTable set column_name = %s where ID = %s
.
La mejor estrategia de escape para Python + MySQL se preparan . – zneak
¿Podrías por favor elaborar? ¡Gracias! – ThinkCode
@zneak: prepare una inserción extendida con 1k filas. – Mchl