
Cómo crear y consultar datos de tipo JSON con Postgresql y Django

¡Hola! Como todas las semanas traigo un tutorial y esta vez toca "enredar" con el ORM de Django y con PostgreSQL.
En el tutorial de hoy vamos a ver como implementar un campo de tipo json en un modelo en Django. Esto nos permitirá dar cierto nivel de dinamismo a nuestras tablas que podemos usar por ejemplo para ampliar el número de datos que puede tener una tabla sin tener que crear campos nuevos y por lo tanto, ahorrarnos problemas con el deploy.
Lo primero es instalar la librería psycopg2 para poder usar PostgreSQL, como siempre lo haremos con pip install.
pip install psycopg2
Después nos vamos a nuestro archivo settings.py y añadimos la siguiente línea para poder utilizar el campo de tipo json.
INSTALLED_APPS = [
.
.
.
'django.contrib.postgres',
]
También deberemos tener una bbdd de tipo PostgreSQL configurada en nuestro archivo settings.py.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': '<bbdd>',
'USER': '<user-bbdd>',
'PASSWORD': '<pass-bbdd>',
'HOST': '<host-ddbb>',
'PORT': '<port-ddbb>',
}
}
Ahora que ya tenemos esto, podemos ir al modelo donde queramos añadir un campo de tipo Json y para usarlo lo que necesitaremos será importarnos el tipo de dato JSONField.
from django.db import models
from django.contrib.postgres.fields import JSONField
class Config(models.Model):
extra_data = JSONField()
Le ponemos el nombre que queramos y listo, ya tenemos nuestro campo de tipo Json 🎉. Ahora solo necesitamos importarlo a la bbdd para poder usarlo.
python manage.py makemigrations
python manage.py migrate
Para crear un dato de tipo json en nuestra tabla solo necesitamos pasarle el dato tipo json a nuestro campo y se guardará sin problemas.
Config.objects.create(extra_data={
'nombre':'Alber',
'apellidos':'Ramírez Caballero',
'direccion': {
'Calle': 'Hola Mundo',
'Numero': 123
}
})
Para consultar sobre campos de tipo json deberemos añadir el nombre del campo donde está guardado, doble guion bajo y el nombre del campo en el json.
res = Config.objects.filter(extra_data__nombre='Alber')
O si queremos acceder a un nivel más profundo del json debemos añadir el doble guion bajo por cada nivel.
res = Config.objects.filter(extra_data__direccion__Numero=123)
Y con estos sencillos pasos ya tendríamos configurado nuestro campo de tipo Json 💪.
Tengo buenas noticias, la próxima semana se viene un super tutorial que estará divido en 5 partes en el que aprenderemos como crear una API con Django Rest Framework.
Espero que este post te ayude y como siempre, te recomiendo seguirme en Twitter para estar al tanto de los nuevo contenido. Ahora también puedes seguirme en Instagram donde estoy subiendo tips, tutoriales en vídeo e información sobre herramientas para developers.
Por último os dejo mi guía para aprender a trabajar con APIs donde explico todo el funcionamiento de una API, el protocolo HTTP y veremos como construir una API con arquitectura REST.
Nos leemos 👋.