एसक्यूएल प्रश्नों के लिए स्ट्रिंग इंटरपोलेशन का उपयोग करने से सावधान रहें, क्योंकि यह इनपुट पैरामीटर से सही तरीके से बच नहीं पाएगा और आपके एप्लिकेशन को एसक्यूएल इंजेक्शन कमजोरियों के लिए खुला छोड़ देगा। अंतर मामूली लग सकता है, लेकिन वास्तव में यह बहुत बड़ा है ।
गलत (सुरक्षा मुद्दों के साथ)
c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s" % (param1, param2))
सही (भागने के साथ)
c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s", (param1, param2))
यह इस भ्रम को बढ़ाता है कि SQL कथन में मापदंडों को बाँधने के लिए उपयोग किए जाने वाले संशोधक विभिन्न DB API कार्यान्वयनों के बीच भिन्न होते हैं और यह कि mysql क्लाइंट लाइब्रेरी printf
का उपयोग करती है। अधिक सामान्यतः स्वीकृत '?' के बजाय शैली वाक्य रचना मार्कर (उदाहरण के लिए उपयोग किया जाता है। python-sqlite
)।