पायथन में MySQL के साथ तैयार किए गए कथनों का उपयोग करना समझाया गया है जैसे https://zetcode.com/db/mysqlpython/ए> -- Prepared statements के लिए उस पृष्ठ में देखें ।
आपके मामले में, वह होगा, उदा:
sql = ('INSERT INTO {} (date, time, tag, power) VALUES '
'(%s, %s, %s, %s)'.format(self.db_scan_table))
और बाद में, "लूप में" जैसा कि आप इसे डालते हैं:
self.cursor.execute(sql, (d, t, tag, power))
बिना किसी स्ट्रिंग स्वरूपण के -- MySQLdb मॉड्यूल आपकी ओर से भागों को तैयार और निष्पादित करता है (और अनावश्यक रूप से काम को दोहराने से बचने के लिए चीजों को कैश कर सकता है, आदि)।
आपके द्वारा उल्लिखित "लूप" की प्रकृति के आधार पर विचार करें कि यह संभव है कि .execute_many पर एक ही कॉल किया जाए। (दूसरे तर्क के रूप में टुपल्स के अनुक्रम के साथ) पूरे लूप की जगह ले सकता है (जब तक कि आपको डीबी में डेटा डालने से परे उस लूप के भीतर और अधिक प्रसंस्करण की आवश्यकता न हो)।
जोड़ा गया:आजकल एक बेहतर विकल्प mysql के अपने Connector/Python का उपयोग करना हो सकता है और स्पष्ट prepare=True .cursor() . में विकल्प फ़ैक्टरी -- देखें https://dev .mysql.com/doc/connector-python/en/connector-python-api-mysqlcursorprepared.html
. यह आपको एक विशिष्ट कर्सर देता है जिस पर कथन तैयार किए जाते हैं ("उस mysql.com पृष्ठ के अनुसार, "PREPARE और EXECUTE का उपयोग करने से अधिक कुशल" बाइनरी प्रोटोकॉल के साथ) और दूसरा उन बयानों के लिए जो बेहतर तैयार नहीं हैं; "अंतर्निहित से स्पष्ट बेहतर है" है "द ज़ेन ऑफ़ पायथन" के सभी सिद्धांतों के बाद (import this उन सभी सिद्धांतों को पढ़ने के लिए एक इंटरैक्टिव प्रॉम्प्ट से)। mysqldb चीजों को परोक्ष रूप से करना (और ऐसा लगता है कि वर्तमान ओपन-सोर्स संस्करण नहीं . है तैयार बयानों का उपयोग करें) Connector/Python के रूप में उतना अच्छा आर्किटेक्चर नहीं हो सकता है अधिक स्पष्ट है।