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

Come aggiornare mysql con python dove i campi e le voci provengono da un dizionario?

Non vuoi inserire valori letterali usando l'interpolazione di stringhe:gli attacchi SQL injection non sono una buona cosa(tm) . Invece, usi la sintassi del segnaposto rilevante per il tuo database (penso che MySQL sia '%s').

Nota:sto usando .format qui, cambia per usare % se vuoi, ma evita qualsiasi %

d = {'col1': 'val1', 'col2': 'val2'}
sql = 'UPDATE table SET {}'.format(', '.join('{}=%s'.format(k) for k in d))
print sql
# 'UPDATE table SET col2=%s, col1=%s'

Assumendo cur è un cursore DB il modo corretto per eseguire la query è:

cur.execute(sql, d.values())

Questo funziona perché sebbene l'ordine di un dizionario sia effettivamente un ordine arbitrario, l'ordine delle chiavi/valori di un dict sarà coerente in modo tale che dict(zip(d.keys(), d.values())) == d .