PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

यूटीएफ -8 के साथ JSON फ़ील्ड के अंदर SQLAlchemy टेक्स्ट मिलान डेटा

समस्या cast(Unicode) में है Postgresql json . का कॉलम। यह बस json . को कास्ट करता है SQLAlchemy के Unicode . में अंतर्निहित टेक्स्ट प्रकार के लिए , Postgresql VARCHAR . के मामले में . दूसरे शब्दों में यह टेक्स्ट सामग्री निकालने के बजाय JSON का एक स्ट्रिंग प्रतिनिधित्व उत्पन्न करता है। यदि आपका इनपुट यूनिकोड कोडपॉइंट से बच निकला है, तो वे इस मामले में आउटपुट हैं। एक आसान Test को देखते हुए json . वाला मॉडल कॉलम डेटा :

In [7]: t = Test(data={'summary': 'Tämä on summary.'})

In [8]: session.add(t)

In [9]: session.commit()

In [11]: session.query(Test.data['summary'].cast(Unicode)).scalar()
Out[11]: '"T\\u00e4m\\u00e4 on summary."'

यह स्पष्ट होना चाहिए कि अनचाहे यूनिकोड वर्णों वाला एक मैच क्यों विफल हो जाएगा। बची हुई यूनिकोड को छोड़कर, टेक्स्ट सामग्री को निकालने का सही तरीका है astext , जो ->> का उपयोग करता है ऑपरेटर पोस्टग्रेस्क्ल में:

In [13]: session.query(Test.data['summary'].astext).scalar()
Out[13]: 'Tämä on summary.'

JSON फ़ंक्शन और ऑपरेटर दस्तावेज़ों का हवाला देते हुए:

तो आपके मामले में:

Message.query.\
    filter(Message.content['summary'].astext.match(term))

ध्यान दें कि यह केवल json . पर लागू होता है टाइप करें, न कि jsonb , क्योंकि json प्रकार इनपुट पर यूनिकोड एस्केप को परिवर्तित नहीं करता है। jsonb दूसरी ओर सभी यूनिकोड एस्केप को बराबर ASCII या UTF-8 में कनवर्ट करता है भंडारण के लिए वर्ण . अगर हमारा Test मॉडल में एक दूसरा कॉलम था data2 jsonb , ठीक उसी इनपुट के साथ, तो परिणाम होगा:

In [11]: session.query(Test.data['summary'].cast(Unicode),
    ...:               Test.data2['summary'].cast(Unicode)).first()
Out[11]: ('"T\\u00e4m\\u00e4 on summary."', '"Tämä on summary"')

फिर भी, आपको astext . का उपयोग करना चाहिए , यदि आप JSON के स्ट्रिंग प्रस्तुतिकरण के बजाय टेक्स्ट चाहते हैं।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक हाइब्रिड वातावरण में PostgreSQL की निगरानी करना

  2. कैसे timeofday () PostgreSQL में काम करता है

  3. कैसे pgAdmin III में कई तालिकाओं के लिए एक बनाएँ स्क्रिप्ट उत्पन्न करने के लिए?

  4. MySQL, PostgreSQL और SQLite में डेटाबेस कॉलम प्रकारों की तुलना? (क्रॉस-मैपिंग)

  5. Postgresql ORDER BY रिक्त स्थान