यह केवल उन सभी के बारे में भ्रमित करता है जो MySQLDB के साथ काम करते हैं। आप निष्पादन समारोह में तर्क पारित कर रहे हैं, पायथन स्ट्रिंग प्रतिस्थापन नहीं कर रहे हैं। क्वेरी स्ट्रिंग में %s का उपयोग पाइथन स्ट्रिंग प्रतिस्थापन की तुलना में तैयार कथन की तरह अधिक किया जाता है। यह SQL इंजेक्शन को भी रोकता है क्योंकि MySQLDB आपके लिए भागने का काम करेगा। जैसा कि आपके पास पहले था (% और स्ट्रिंग प्रतिस्थापन का उपयोग करके), आप इंजेक्शन के लिए कमजोर हैं।
- उद्धरणों का प्रयोग न करें। MySQLDB उन्हें वहां रखेगा (यदि आवश्यक हो)।
-
% के बजाय a का उपयोग करें। फिर से, आप एक टपल को एक्जीक्यूट फंक्शन के तर्क के रूप में पास कर रहे हैं।
self.dbc.execute ("कार से चुनें * जहाँ reg=%s", (reg,))