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.
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