Django
JSONField - PostgreSQL 특정 필드
수색…
통사론
- JSONField (** 옵션)
비고
Django의
JSONField
실제로 데이터를 PostgresJSONB
열에 저장합니다.이 열은 Postgres 9.4 이상에서만 사용할 수 있습니다.JSONField
는보다 유연한 스키마를 원할 때 유용합니다. 예를 들어 데이터 마이그레이션을 수행하지 않고 키를 변경하려는 경우 또는 모든 객체가 동일한 구조를 가지지 않는 경우입니다.정적 키를 사용하여 데이터를 저장하는 경우
JSONField
를 쿼리JSONField
때때로 지루할 수 있으므로JSONField
대신 여러 개의 일반 필드를 사용하는JSONField
좋습니다.
쿼리 연결
쿼리를 함께 연결할 수 있습니다. 예를 들어 목록에 사전이있는 경우 두 개의 밑줄과 사전 쿼리를 추가합니다.
이중 밑줄로 쿼리를 구분하는 것을 잊지 마십시오.
JSONField 만들기
장고 1.9 이상에서 사용 가능
from django.contrib.postgres.fields import JSONField
from django.db import models
class IceCream(models.Model):
metadata = JSONField()
원하는 경우 일반 **options
추가 할 수 있습니다.
! 당신이 넣어해야합니다
'django.contrib.postgres'
에INSTALLED_APPS
당신의settings.py
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
직접 주문하는 것은 아직 장고에서 지원되지 않습니다. 그러나 jSQLb 용 PostgreSQL 함수를 사용하는 RawSQL을 통해 가능합니다.
from django.db.models.expressions import RawSQL
RatebookDataEntry.objects.all().order_by(RawSQL("data->>%s", ("json_objects_key",)))
이 예제는 data['json_objects_key']
라는 JSONField
내부의 data['json_objects_key']
별로 주문 data
.
data = JSONField()