본문 바로가기
python/Django

Django JSONField (Postgresql)

by Redking

JSON은 소프트웨어 플랫폼에서 쉽게 접할 수 있는 데이터 유형입니다. 

JSONField의 유연성은 데이터를 쉽게 가져오고 사용하는 데 도움이 되며, JSONField를 사용하여 복잡하게 처리해야할 데이터도 간단하게 처리할 수 있습니다.

Django 지원하는 대부분의 DATABASE 역시 JSON 지원하고 Django 버전에 따라 JSONField를 사용하는 방법이 조금 다릅니다.

1. JSONField 생성하기

from django.db import models

class Sample(models.Model):
	...
    datas = models.JSONField('json', default=dict)

JSONField는 models에 내장되어 있는 필드로 JSON 인코딩 데이터를 저장하기 위해 존재합니다. 대부분의 Django 사용자가 사용하는 postgresql에서는 jsonb 타입으로 저장되는데 jsonb는 json과는 별개의 타입이므로 이에 대한 이해가 필요합니다.

2. JSONField 사용하기

>>> sample = Sample.objects.create(datas={'aaa':111, 'bb':222, 'c': 333})
>>> sample.datas
# {'c': 333, 'bb': 222, 'aaa': 111}

Sample의 datas에 {'aaa':111, 'bb':222, 'c': 333}를 할당하여 새로운 Sample을 생성한 후에 datas를 확인해 보았더니 저장한 순서대로 나오지 않는걸 확인할 수 있다. 파이썬 3.6 부터는 dict OrderedDict 클래스와 동일하게 동작하기 때문에 순서에 대한 처리 없이 저장할 수 있는데 이런 결과가 나오게 된 점에 의아할 수 있는데 그 이유는 jsonb가 사용되기 때문이다.

3. JSONB

JSONB 타입은 입력받은 데이터를 바이너리 포맷으로 저장하게 되고 인덱싱, 데이터 파싱이 가능하고

JSON 타입은 입력받은 데이터를 그대로 저장하게 되는데 JSONB의 단점은 순서대로 저장이 안된다는 점이다.

하지만 성능면에서 JSON보다 우수하기 때문에 django postgresql JSONField에서는 jsonb만 지원하고 있다.

JSON 타입을 사용하기 위해서 몇가지 방법을 쓸 수 있지만 재대로 된 방법이 아니기 때문에 지양하는게 좋다.

'python > Django' 카테고리의 다른 글

Django 시그널  (0) 2023.12.13
Django 5.0 버전 출시 전 살펴보기  (1) 2023.11.23
Django bulk_create/bulk_update  (0) 2022.11.16
Django sitemap 분할 관리하기  (0) 2022.10.13
Django annotate management  (0) 2022.10.12

댓글