Django
JSONField - एक PostgreSQL विशिष्ट क्षेत्र
खोज…
वाक्य - विन्यास
- JSONField (** विकल्प)
टिप्पणियों
Django के
JSONField
वास्तव में PostgresJSONB
कॉलम में डेटा संग्रहीत किया है, जो केवल Postgres 9.4 और बाद में उपलब्ध है।जब आप अधिक लचीला स्कीमा चाहते हैं तो
JSONField
बहुत अच्छा है। उदाहरण के लिए यदि आप कोई डेटा माइग्रेशन किए बिना चाबियों को बदलना चाहते हैं, या यदि आपकी सभी वस्तुओं में समान संरचना नहीं है।यदि आप स्थैतिक कुंजी के साथ डेटा संग्रहीत कर रहे हैं, तो
JSONField
s के बजाय कई सामान्य फ़ील्ड का उपयोग करने पर विचार करें, क्योंकि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()