Bạn không muốn đặt các giá trị theo nghĩa đen bằng cách sử dụng nội suy chuỗi - Các cuộc tấn công chèn vào SQL không phải là Điều tốt (tm) . Thay vào đó, bạn sử dụng cú pháp trình giữ chỗ có liên quan cho cơ sở dữ liệu của mình (tôi nghĩ MySQL's là '% s').
Lưu ý:Tôi đang sử dụng .format
ở đây, thay đổi để sử dụng% nếu bạn muốn, nhưng thoát khỏi bất kỳ% 's
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'
Giả sử cur
là con trỏ DB, cách chính xác để thực hiện truy vấn là:
cur.execute(sql, d.values())
Điều này hoạt động vì mặc dù thứ tự của từ điển là thứ tự tùy ý thực sự, thứ tự của các khóa / giá trị của một dict sẽ nhất quán sao cho dict(zip(d.keys(), d.values())) == d
.