के लिए सरणी के लिए psycopg2 पैरामीटर निर्दिष्ट करने के लिए कैसे करें मैं psycopg2 का उपयोग करके पायथन में एक पोस्टग्रेएसक्यूएल क्वेरी चलाने के लिए चाहता हूं, जो timestamp without timezone
के कॉलम द्वारा फ़िल्टर करता है। मैं आसानी से सरणियों संभालती टाइमस्टैम्प (बजाय एक सीमा) और psycopg2 के मूल्यों को अनुमति की एक लंबी सूची है, तो मैंने सोचा था कि यह काम करना चाहिए:टाइमस्टैम्प (डेटाटाइम)
SELECT somestuff
FROM mytable
WHERE thetimestamp = ANY (%(times)s)
times
पैरामीटर datetime
वस्तुओं की एक सूची है। मैंने psycopg2.Timestamp()
भी कोशिश की है। वे दोनों WHERE thetimestamp = ANY (ARRAY['2009-07-06T00:00:00', '2009-07-07T00:00:00', ...])
करने के लिए अनुवाद और दुर्भाग्य से जो निम्न त्रुटि के साथ विफल:
operator does not exist: timestamp without time zone = text
LINE 3: WHERE thetimestamp = ANY (ARRAY['2009-07-06T00:00:00', '2009-07-07T00:00:00', ...]
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
मैं भी pgAdmin में इस की पुष्टि की है, तो यह सिर्फ psycopg2 नहीं है। ऐसा प्रतीत होता है कि पोस्टग्रेस समय-समय पर तारों की सरणी में तारों की सरणी को रूपांतरित नहीं करेगा। यह एक स्ट्रिंग जुर्माना को कन्वर्ट करेगा और सरणी ठीक काम करती है अगर मैं स्पष्ट रूप से ::timestamp
को pgAdmin में प्रत्येक तत्व में जोड़ता हूं, लेकिन मुझे नहीं पता कि psycopg2 में ऐसा कैसे करें।
डीबी-एपीआई पैरामीटर को भूलने और मैन्युअल रूप से टाइमस्टैम्प की लंबी स्ट्रिंग बनाने के अलावा, ऐसा करने का सबसे अच्छा तरीका क्या है? क्या कोई तरीका है कि मैं इसे सही प्रकार पर डालने के लिए प्राप्त कर सकता हूं? ,
SELECT somestuff
FROM mytable
WHERE thetimestamp = ANY (%(times)s::timestamp[])