Django
JSONField - एक PostgreSQL विशिष्ट क्षेत्र
खोज…
वाक्य - विन्यास
- JSONField (** विकल्प)
टिप्पणियों
Django के
JSONFieldवास्तव में PostgresJSONBकॉलम में डेटा संग्रहीत किया है, जो केवल Postgres 9.4 और बाद में उपलब्ध है।जब आप अधिक लचीला स्कीमा चाहते हैं तो
JSONFieldबहुत अच्छा है। उदाहरण के लिए यदि आप कोई डेटा माइग्रेशन किए बिना चाबियों को बदलना चाहते हैं, या यदि आपकी सभी वस्तुओं में समान संरचना नहीं है।यदि आप स्थैतिक कुंजी के साथ डेटा संग्रहीत कर रहे हैं, तो
JSONFields के बजाय कई सामान्य फ़ील्ड का उपयोग करने पर विचार करें, क्योंकिJSONFieldको क्वेरीJSONFieldकभी-कभी काफी थकाऊ हो सकता है।
ज्वलंत प्रश्न
आप एक साथ प्रश्नों की श्रृंखला बना सकते हैं। उदाहरण के लिए, यदि कोई शब्द सूची के अंदर मौजूद है, तो दो अंडरस्कोर और अपनी शब्दकोश क्वेरी जोड़ें।
डबल अंडरस्कोर वाले प्रश्नों को अलग करना न भूलें।
एक JSONField बनाना
Django 1.9+ में उपलब्ध है
from django.contrib.postgres.fields import JSONField
from django.db import models
class IceCream(models.Model):
metadata = JSONField()
आप चाहें तो सामान्य **options जोड़ सकते हैं।
! ध्यान दें कि आपको अपनी
settings.pyमेंINSTALLED_APPSमें'django.contrib.postgres'डालना होगा
एक JSONField में डेटा के साथ एक ऑब्जेक्ट बनाना
देशी पायथन फॉर्म में डेटा पास करें, उदाहरण के लिए list , dict , str , None , bool आदि।
IceCream.objects.create(metadata={
'date': '1/1/2016',
'ordered by': 'Jon Skeet',
'buyer': {
'favorite flavor': 'vanilla',
'known for': ['his rep on SO', 'writing a book']
},
'special requests': ['hot sauce'],
})
व्यवहार में
JSONFieldका उपयोग करने के बारे में "रिमार्क्स" अनुभाग में नोट देखें।
शीर्ष स्तर के डेटा को छोड़ना
IceCream.objects.filter(metadata__ordered_by='Guido Van Rossum')
क्वेरीज़ डेटा को शब्दकोशों में निहित किया गया है
सभी आइसक्रीम कोन प्राप्त करें जो चॉकलेट पसंद करने वाले लोगों द्वारा ऑर्डर किए गए थे:
IceCream.objects.filter(metadata__buyer__favorite_flavor='chocolate')
क्वेरीज़ का पीछा करने के बारे में "रिमार्क्स" अनुभाग में नोट देखें।
सरणियों में मौजूद डेटा का क्वेरी करना
एक पूर्णांक को एक इंडेक्स लुकअप के रूप में व्याख्या किया जाएगा।
IceCream.objects.filter(metadata__buyer__known_for__0='creating stack overflow')
क्वेरीज़ का पीछा करने के बारे में "रिमार्क्स" अनुभाग में नोट देखें।
JSONField मानों द्वारा ऑर्डर करना
सीधे JSONField पर JSONField करना अभी तक Django में समर्थित नहीं है। लेकिन रॉसन के माध्यम से संभव है कि jsonb के लिए PostgreSQL फ़ंक्शन का उपयोग कर:
from django.db.models.expressions import RawSQL
RatebookDataEntry.objects.all().order_by(RawSQL("data->>%s", ("json_objects_key",)))
data['json_objects_key'] द्वारा यह उदाहरण आदेश data['json_objects_key'] JSONField नाम के अंदर data :
data = JSONField()