आप स्ट्रिंग इंटरपोलेशन का उपयोग करने में शाब्दिक मूल्य नहीं डालना चाहते हैं - SQL इंजेक्शन हमले अच्छी बात नहीं है (tm) हैं . इसके बजाय, आप अपने डेटाबेस के लिए प्रासंगिक प्लेसहोल्डर सिंटैक्स का उपयोग करते हैं (मुझे लगता है कि MySQL '%s' है)।
नोट:मैं .format
. का उपयोग कर रहा हूं यहां, यदि आप चाहें तो % का उपयोग करने के लिए बदलें, लेकिन किसी भी % से बचें
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'
मान लें कि cur
एक डीबी कर्सर है जो क्वेरी करने का सही तरीका है:
cur.execute(sql, d.values())
यह काम करता है क्योंकि हालांकि एक शब्दकोश का क्रम प्रभावी ढंग से मनमाना क्रम है, एक ताना की चाबियों/मानों का क्रम सुसंगत होगा जैसे कि dict(zip(d.keys(), d.values())) == d
।