sql >> Base de Datos >  >> RDS >> Mysql

¿Cuál es la mejor estrategia de caracteres de escape para el combo Python/MySQL?

Aquí hay 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]])

Actualizar

Aquí hay un breve comentario:

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

Siempre es una buena idea 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) 

Estoy formando la consulta aquí. Estoy tratando de lograr dos cosas:(1) formar una consulta con el nombre de la columna poblada usando la column La variable declarada en la línea anterior (2) agrega marcadores de posición que se completarán con los 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 gracias al dict constructor. No quiero completar los otros marcadores de posición todavía, así que los escapo usando dos signos de porcentaje (%% ).

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

Finalmente ejecuta la consulta. Si imprime la consulta antes de ejecutar, verá la cadena update myTable set column_name = %s where ID = %s .