Mysql
 sql >> Database >  >> RDS >> Mysql

Qual è la migliore strategia di escape dei caratteri per la combinazione Python/MySQL?

Ecco un esempio:

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]])

Aggiorna

Ecco un breve commento:

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

È sempre una buona idea sfuggire a tutto ciò che entra in una query. In questo caso stiamo aggiungendo dinamicamente un nome di colonna e quindi è necessario eseguire l'escape prima che la query venga eseguita.

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

Sto formando la domanda qui. Sto cercando di ottenere due risultati:(1) formare una query con il nome della colonna popolato utilizzando la column la variabile dichiarata nella riga precedente (2) aggiunge i segnaposto che verranno riempiti dai parametri effettivi durante l'esecuzione della query.

Lo snippet dict(column = column) è in realtà un altro modo per creare il dizionario {'column': column} . Ciò è possibile utilizzando il dict costruttore. Non voglio ancora riempire gli altri segnaposto, quindi li esco utilizzando due segni di percentuale (%% ).

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

Infine esegui la query. Se stampi la query prima dell'esecuzione vedrai la stringa update myTable set column_name = %s where ID = %s .