python - Psycopg2 "operator does not exist: integer[] = integer" error -


namespace_list नामक एक तालिका को INTEGER [] कॉलम के साथ दिया गया namespace_ids

मेरे पास निम्न क्वेरी है:

  query = SELECT * namepace_list से जहां नामस्थान_आईडी = किसी भी (% s) और application_id =% S  

जिसे मैं निष्पादित कर रहा हूं:

  cur.execute (क्वेरी, डेटा)  

और जहां डेटा है:

  डेटा = ([1, 2], 1)  

मुझे निम्न त्रुटि मिल रही है:

  ऑपरेटर मौजूद नहीं है: पूर्णांक [] = चरित्र पर पूर्णांक 50 \ nHINT: कोई ऑपरेटर दिए गए नाम और तर्क प्रकार (नों) से मेल नहीं खाता। आपको स्पष्ट प्रकार डाले जाने की आवश्यकता हो सकती है  

यह काम क्यों नहीं कर रहा है? देख रहे हैं, और पोस्टग्रेज़ एरेज़ पर अन्य ट्यूटोरियल, ऐसा लगता है कि मेरे पास सही क्वेरी है।

मैं एक उदाहरण के रूप में भी अनुसरण कर रहा हूं। क्या मेरी क्वेरी में कुछ गड़बड़ है, या जिस तरह से मैं psycopg2 के साथ सरणियों का उपयोग कर रहा हूं?

समस्या है कि SQL अभिव्यक्ति:

  & lt; स्तंभ & gt;  < & lt; column & gt;  में  स्केलर  मान किसी भी मान के बराबर है, तो  

सही देता है & lt; सरणी & gt; मूल्यों की एक-एक तुलना करके लेकिन आपका कॉलम एक स्केलर वैल्यू नहीं है, यह एक सरणी है और इसी कारण PostgreSQL कहते हैं:

  ऑपरेटर मौजूद नहीं है: पूर्णांक [] = पूर्णांक  

एक ऑपरेटर को किसी भी पूर्णांक (दाएं) में सरणी (बाएं) की तुलना करने के लिए मौजूद नहीं है इसे ठीक करने के लिए आप एक प्रतिच्छेदन ऑपरेटर ( & amp; amp; ) का उपयोग कर सकते हैं (यदि आपको दोनों सेटों से सिर्फ एक आईडी मैच की आवश्यकता है) या समानता ऑपरेटर ( = ) आप सभी सरणी तत्वों से मिलान करना चाहते हैं:

  SELECT * FROM नामस्थान_ सूची WHERE नामस्थान_आईडी & amp; amp; यहाँ चाल यह है कि psycopg पायथन सूचियों को शाब्दिक सरणियों ( ARRAY [...] ) में कनवर्ट करता है जो कि आप कहीं भी उपयोग कर सकते हैं। आप उन्हें मानक एसक्यूएल में इस्तेमाल करेंगे। 


Comments