Anda tidak ingin menempatkan nilai literal dalam menggunakan interpolasi string - serangan injeksi SQL bukan Hal yang Baik(tm) . Sebagai gantinya, Anda menggunakan sintaks placeholder yang relevan untuk database Anda (saya pikir MySQL adalah '%s').
Catatan:Saya menggunakan .format
di sini, ubah untuk menggunakan % jika Anda mau, tetapi lepas dari % apa pun
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'
Dengan asumsi cur
adalah kursor DB cara yang benar untuk melakukan kueri adalah:
cur.execute(sql, d.values())
Ini berfungsi karena meskipun pemesanan kamus secara efektif merupakan urutan arbitrer, urutan kunci/nilai dari dict akan konsisten sehingga dict(zip(d.keys(), d.values())) == d
.