septiembre 22, 2020

C贸mo manipular datos con migraciones de Django

Hablaremos de c贸mo manipular datos con migraciones de Django, as铆 como actualizar modelos y manipular los datos existentes mediante migraciones.

Las aplicaciones m谩s populares est谩n creciendo tienen un problema en com煤n. A medida que se desarrollan tienden a acumular complicaciones de la misma manera en que un pastel cuenta con capas de glaseado.

Afortunadamente, el framework Django maneja la complejidad bastante bien, ya que sus modelos ayudan a trabajar con datos con una l贸gica entendible. Y el framework ofrece muchas propiedades que puede desarrollar una aplicaci贸n s贸lida desde cero.

驴Qu茅 son las migraciones de Django?

Son archivos de Python que lo ayudan a agregar y cambiar cosas en las tablas de la base de datos para reflejar cambios en los modelos de Django.

Para comprender c贸mo las migraciones de Django ayudan a trabajar con datos, es 煤til comprender las estructuras subyacentes con las que contamos.

驴Qu茅 es una tabla de base de datos?

Es similar a un archivo de Excel. En una base de datos relacional, por ejemplo, una base de datos PostgreSQL, se pueden ver datos organizados en columnas y filas. En Django, cada modelo es su propia tabla. Por ejemplo, el siguiente modelo de Django:

from django.db import models

class Lunch(models.Model):

    left_side = models.CharField(max_length=100, null=True)

    center = models.CharField(max_length=100, null=True)

    right_side = models.CharField(max_length=100, null=True)

Cada campo es una columna y cada fila es un objeto Django de ese modelo.

Aqu铆 una representaci贸n de una tabla de base de datos para el modelo de Django “Lunch” anterior. En la base de datos, su nombre ser铆a lunch_table.

Lunch_table
Lunch_table

Este modelo tiene tres campos: left_side, center, y right-side. Una instancia de un objeto Lunch tendr铆a “fork” para el left_side, un “Plate” para el centery “Spoon” para el right_side.

Django agrega autom谩ticamente un campo id si no especifica una clave principal.

Si se quisiera cambiar el nombre del modelo Lunch, se har铆a en el c贸digo models.py.

Por ejemplo, cambiar “Lunch” a “Dinner” y luego ejecutar python manage.py makemigrations, se ver铆a as铆:

python manage.py makemigrations

Did you rename the backend.Lunch model to Dinner? [y/N] y

Migrations for ‘backend’:

  backend/migrations/0003_auto_20200922_2331.py

    – Rename model Lunch to Dinner

Django genera autom谩ticamente los archivos de migraci贸n adecuados. La l铆nea relevante del archivo de migraciones en este caso se ver铆a as铆:

migrations.RenameModel(old_name=”Lunch”, new_name=”Dinner”),

Esta operaci贸n cambiar铆a el nombre de nuestro modelo “Lunch” a “Dinner” manteniendo lo dem谩s igual.

C贸mo manipular datos con migraciones de Django

Antes de comenzar a manipular los datos, es buena idea crear una copia de seguridad de la base de datos.

Hay varias formas de hacer esto dependiendo de la base de datos que se utilice. Normalmente, se puede encontrar instrucciones mediante la b煤squeda de <your database name> palabras clave como backup, recovery o snapshot.

Para dise帽ar la migraci贸n, se recomienda familiarizarse con las operaciones de migraci贸n disponibles.

Las migraciones se ejecutan paso a paso y cada operaci贸n es una forma de agregar, eliminar o alterar datos. Como un rompecabezas, es importante hacer cambios de modelo paso a paso para que las migraciones generadas tengan un buen resultado.

Ya se cambi贸 el nombre del modelo con 茅xito. Ahora, se cambiar谩 el nombre de los campos que contienen los datos que se van a retener:

class Dinner(models.Model):

    bottom_left = models.CharField(max_length=100, null=True)

    bottom_center = models.CharField(max_length=100, null=True)

    top_center = models.CharField(max_length=100, null=True)

A veces, Django determinar谩 correctamente los nombres de campo nuevos y antiguos, por lo que se pedir谩 confirmaci贸n:

python manage.py makemigrations

Did you rename dinner.center to dinner.bottom_center (a CharField)? [y/N] y

Did you rename dinner.left_side to dinner.bottom_left (a CharField)? [y/N] y

Did you rename dinner.right_side to dinner.top_center (a CharField)? [y/N] y

Migrations for ‘backend’:

  backend/migrations/0004_auto_20200914_2345.py

    – Rename field center on dinner to bottom_center

    – Rename field left_side on dinner to bottom_left

    – Rename field right_side on dinner to top_center

Ahora que los campos existentes se han migrado con sus nuevos nombres, se debe agregar los campos restantes al modelo:

class Dinner(models.Model):

    top_left = models.CharField(max_length=100, null=True)

    top_center = models.CharField(max_length=100, null=True)

    top_right = models.CharField(max_length=100, null=True)

    bottom_left = models.CharField(max_length=100, null=True)

    bottom_center = models.CharField(max_length=100, null=True)

    bottom_right = models.CharField(max_length=100, null=True)

Correr de makemigrations nuevo ahora dar铆a:

python manage.py makemigrations

Migrations for ‘backend’:

  backend/migrations/0005_auto_20200914_2351.py

    – Add field bottom_right to dinner

    – Add field top_left to dinner

    – Add field top_right to dinner

Al generar migraciones de Django, se ha configurado con 茅xito la dinner_table datos existentes y los ha movido a su nuevo lugar.

Le铆ste: C贸mo manipular datos con migraciones de Django, te recomendamos: Bibliotecas de JavaScript para crear mapas interactivos

Te invitamos a que nos sigas en nuestras redes sociales: Facebook, Twitter, Instagram y Youtube con el perfil:聽@tortugacode