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

पोस्टग्रेज के साथ JSONField में Django एनोटेट गिनती

आप jsonb_extract_path_text का उपयोग कर सकते हैं एक Func के माध्यम से ऑब्जेक्ट फ़ील्ड ट्रांसफ़ॉर्म के विकल्प के रूप में:

Pet.annotate(dinner=Func(
    F('data'), Value('diet'), Value('dinner'),
    function='jsonb_extract_path_text'))  \
.values('dinner')  \
.annotate(total=Count('dinner'))

फ़ील्ड बदलने का कारण data__diet__dinner विफल रहता है Django के भीतर एक त्रुटि है जब आप json संरचना में सिर्फ एक स्तर से अधिक गहराई तक जाते हैं और GROUP BY . का उपयोग करें एसक्यूएल में। प्रथम स्तर (name , animal , diet ) ठीक काम करना चाहिए।

इसका कारण यह प्रतीत होता है कि नेस्टेड ट्रांसफ़ॉर्म के लिए, Django उपयोग किए गए SQL सिंटैक्स को बदलता है, एकल मान से सूची में स्विच करके json संरचना में पथ निर्दिष्ट करता है।

यह गैर-नेस्टेड जोंस ट्रांस्फ़ॉर्म (=प्रथम स्तर) के लिए उपयोग किया जाने वाला सिंटैक्स है:

"appname_pet"."data" -> 'diet'

और यह नेस्टेड ट्रांसफ़ॉर्म (पहले स्तर से गहरा) के लिए उपयोग किया जाने वाला सिंटैक्स है:

"appname_pet"."data" #> ARRAY['diet', 'dinner']

क्वेरी का निर्माण करते समय, आवश्यक GROUP BY पर काम करते समय Django उस सूची में चोक हो जाता है खंड। यह एक अपरिहार्य प्रतिबंध नहीं लगता है; परिवर्तन के लिए समर्थन काफी नया है, और यह संभवत:उन किंकों में से एक है जिस पर अभी तक काम नहीं किया गया है। इसलिए अगर आप Django टिकट खोलते हैं , यह लाइन के कुछ ही संस्करणों में काम कर सकता है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. रेल:सरणी की सरणी में तत्व खोजने के लिए दायरे का उपयोग कैसे करें

  2. एसक्यूएल में एक छद्म लिंक्ड सूची बनाना

  3. PostgreSQL में एक टेबल से दूसरी टेबल में डालने के लिए फंक्शन?

  4. Plpgsql में दी गई तालिका के आधार पर वापसी पंक्ति प्रकारों को गतिशील रूप से परिभाषित करें?

  5. मुझे libpq स्रोत कहां मिलेगा?