2010-12-10 12 views
5

हाय मैं वाइल्डकार्ड के साथ उपयोगकर्ता इनपुट के आधार पर एक एसक्यूलाइट टेबल खोजने की कोशिश कर रहा हूं। मैंने विभिन्न तरीकों का प्रयास किया है, मैं इसे काम नहीं कर सकता। यह आखिरी बात मैंने कोशिश की है, यह एक समाधान मैं यहाँ वास्तव में पाया है, लेकिन यह अजगर 3.पायथन + स्क्लाइट: वाइल्डकार्ड के साथ LIKE क्वेरी

search = input("type name or partial name: ") 
    cur.execute("select * from contacts where name like ?", 
       ('%'+search+'%')) 

यह है कि अंतिम पंक्ति पर इस त्रुटि का उत्पादन में परिवर्तित हो सकता है।

sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 5 supplied. 

मैंने कई अलग-अलग चीजों की कोशिश की और यह मुझे पागल कर रहा है। मुझे लगता है कि पूरी तालिका को पहले स्ट्रिंग में पढ़ने के बिना यह संभव नहीं है।

उत्तर

11

आपकी समस्या यह है कि आपने cur.execute पर दूसरे तर्क के रूप में एक स्ट्रिंग की आपूर्ति की है, जब आप शायद स्ट्रिंग युक्त एकल-तत्व ट्यूपल की आपूर्ति करना चाहते थे।

चूंकि एक स्ट्रिंग एक अनुक्रम है, स्ट्रिंग में प्रत्येक वर्ण को एक अलग पैरामीटर के रूप में व्याख्या किया जाएगा और यही कारण है कि आप "बाइंडिंग की गलत संख्या" त्रुटि देखते हैं।

प्रयास करें:

cur.execute("select * from contacts where name like ?", ('%'+search+'%',)) 

नोट टपल में अल्पविराम, ('%'+search+'%',)। इसके बिना, यह एक tuple नहीं है, केवल एक स्ट्रिंग कोष्ठक में।

+0

मैं देखता हूं। बहुत बहुत धन्यवाद: डी –

+0

@steini अगर यह उत्तर आपके लिए काम करता है, तो कृपया इसे "स्वीकार करें"। – bogeymin

संबंधित मुद्दे