समस्या यह है कि ('hello')
एक स्ट्रिंग है और ('hello',)
एक टुपल है . आपको अपने प्लेसहोल्डर्स के लिए हमेशा एक टपल (या सूची की तरह अन्य संग्रह) को मूल्यों के रूप में पास करने की आवश्यकता होती है। इसका कारण यह है कि आपके प्लेसहोल्डर स्थित हैं आपकी क्वेरी में, इसलिए तर्कों में भी कुछ क्रम होना चाहिए - और टुपल्स और सूचियाँ वस्तुओं के क्रमबद्ध चयन को प्राप्त करने के दो तरीके हैं।
चूंकि यह एक टपल या अन्य संग्रह की अपेक्षा कर रहा है, 106
[1, 0, 6]
. में परिवर्तित हो जाता है . अगर आप (106,)
. में पास होते हैं , इसकी सही व्याख्या की जाएगी।
परदे के पीछे यही चल रहा है:
>>> for i in '106':
... print(i)
...
1
0
6
>>> for i in ('106',):
... print(i)
...
106
तो, आपका 'हैक' वास्तव में सही समाधान है, आपको बस अतिरिक्त चर की आवश्यकता नहीं है:
q = 'SELECT Last_Request_Time FROM Products WHERE idProduct = %s'
cursor.execute(q, (idProduct,))