Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Qual é a melhor estratégia de caractere de escape para combinação Python/MySQL?


Aqui está um exemplo:
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]])

Atualizar

Segue um breve comentário:
column = str(MySQLdb.escape_string(row[1]))

Sempre é uma boa ideia escapar de qualquer coisa que entre em uma consulta. Nesse caso, estamos adicionando dinamicamente um nome de coluna e, portanto, ele deve ser escapado antes que a consulta seja executada.
query = "update myTable set %(column)s = %%s where ID = %%s" % dict(column = column) 

Estou formando a consulta aqui. Estou tentando conseguir duas coisas:(1) formar uma consulta com o nome da coluna preenchido usando a column A variável declarada na linha anterior (2) adiciona placeholders que serão preenchidos pelos parâmetros reais durante a execução da consulta.

O trecho dict(column = column) é na verdade outra maneira de criar o dicionário {'column': column} . Isso é possível usando o dict construtor. Eu não quero preencher os outros espaços reservados ainda, então eu os escapo usando dois sinais de porcentagem (%% ).
cursor2.execute(query, [row[3], row[0]])

Por fim, execute a consulta. Se você imprimir a consulta antes de executar, verá a string update myTable set column_name = %s where ID = %s .