विधि executemany(sql, seq_of_parameters)
मापदंडों के एक सेट के लिए एक ही SQL कथन को कई बार निष्पादित करता है। इसलिए, दूसरा तर्क, seq_of_parameters
, पैरामीटर टुपल्स का एक क्रम होना चाहिए, न कि केवल एक पैरामीटर टपल:
cursor.executemany("update sampledata SET POS = ? where SRNO = ?", [(x[a], a)])
यदि आप केवल एक टपल पास करते हैं, तो कर्सर मान लेगा कि पहला आइटम, x[a]
है , मापदंडों का एक टपल है। मुझे लगता है कि यह 50 वर्णों की एक स्ट्रिंग है और 50 पैरामीटर के अनुक्रम के रूप में व्याख्या की जाती है, जबकि SQL स्ट्रिंग केवल 2 की अपेक्षा करती है।
इसके अलावा, ध्यान दें कि मैंने ?
. का उपयोग किया है %s
. के बजाय प्लेसहोल्डर प्रतीक के रूप में , चूंकि बाद वाला पीओओडीबीसी द्वारा समर्थित नहीं है, क्योंकि उसने बताया कि यह 0 पैरामीटर की अपेक्षा करता है।
आपके मामले में, आप execute()
. का उपयोग करना चाह सकते हैं लूप में विधि, चूंकि आप केवल एक बार प्रति पुनरावृत्ति कथन चलाना चाहते हैं:
cursor.execute("update sampledata SET POS = ? where SRNO = ?", (x[a], a))