वर्तमान में मैं कुछ घटनाओं को पकड़ने के लिए डेटाबेस खोजने का प्रयास कर रहा हूं। मेरे क्वेरी जैसेवाइल्डकार्ड का उपयोग करते हुए साइकोप 2 टाइपरर
SELECT * FROM events WHERE summary ILIKE E'%test%' AND start_time > '2010-10-01'
के रूप में सीधे शब्दों में कहें मैं क्वेरी की जरूरत कैलेंडर घटनाओं के एक डेटाबेस के माध्यम से देख सकते हैं और उस में और इस महीने की शुरुआत के बाद 'परीक्षण' के साथ एक सारांश के साथ कुछ भी वापस जाने के लिए है।
यह डेटाबेस कमांड लाइन से पूछे जाने पर अपेक्षित परिणाम देता है। लेकिन जब मैं इस तरह के रूप psycopg2 के साथ अपने अजगर स्क्रिप्ट में इसका इस्तेमाल करने का प्रयास:
cursor.execute("SELECT * FROM events WHERE summary ILIKE E'%test%' AND start_time > %(begin)s ", {'begin' : datetime.datetime(2010,10,1) })
मैं एक प्रकार की त्रुटि
*** TypeError: 'dict' object does not support indexing
कुछ प्रारंभिक Googling यह रास्ता नहीं मैं उपयोग कर रहा हूँ के साथ कुछ की तरह लगता है कर पाने मेरे वाइल्डकार्ड हालांकि मैं गलत हो सकता था और शायद मुझे कुछ आसान याद आ रहा है जिसे मैं नहीं देख रहा हूं। उम्मीद है कि समुदाय से आंखों की एक नई जोड़ी मेरी नोबिशनेस को सही कर सकती है;)
एचएम जो इसे ठीक करता है। लेकिन मुझे विश्वास नहीं है कि यह मूल समस्या है क्योंकि मैंने शब्दकोश से छुटकारा पाने की कोशिश की और केवल प्रतिस्थापन के बिना लाइन को चलाने के लिए यह देखने के लिए कि वाइल्डकार्ड वास्तव में से बच नहीं रहा था या नहीं। शब्दकोश से छुटकारा पाने के लिए काम किया जाता है तो एक शब्दकोश का उपयोग होने पर मुझे वाइल्डकार्ड से बचने की ज़रूरत क्यों है? –
अंतर्निहित पैरामीटर प्रतिस्थापन '%' का उपयोग एक विशेष चरित्र के रूप में करता है जिसका अर्थ है 'अरे, मेरे यहां से मेरे नियम से मूल्य को प्रतिस्थापित करें'। मेरा अनुमान है कि यदि आप निर्देश पारित नहीं करते हैं, तो यह पैरामीटरकरण तर्क पूरी तरह से छोड़ दिया जाता है, इसलिए आपके पास खंड में '%' की उपस्थिति से भ्रमित होने का कोई मौका नहीं है। दूसरे शब्दों में, यह * पैरामीटरेशन चरण में * हो रहा है जो आप अब नहीं कर रहे हैं। इसलिए, यदि आप पैरामीटर पास कर रहे हैं तो आपको विशेष% चरित्र से बचने की ज़रूरत है, अन्यथा नहीं। –
ठीक है कि समझ में आता है। धन्यवाद महोदय! –