urls - Django 1.8: ¿cuál es la diferencia entre migrar y migrar?
django urls (5)
De acuerdo con la documentación aquí: https://docs.djangoproject.com/en/1.8/topics/migrations/ dice:
migrate, which is responsible for applying migrations, as well as unapplying and listing their status.
y
makemigrations, which is responsible for creating new migrations based on the changes you have made to your models.
Por lo que entiendo, primero hago.
makemigrations
para crear el archivo de migración y luego hacer
migrate
¿Para aplicar realmente la migración?
Tenga en cuenta que recién comencé mi proyecto Django y agregué mi aplicación a mi lista de "Install_apps". Después de eso, lo hice
python manage.py runserver
y dijo
You have unapplied migrations; your app may not work properly until they are applied. Run ''python manage.py migrate'' to apply them.
No mencionó nada sobre la ejecución de migraciones.
Como indica la documentation de Django, las Migraciones son la forma en que Django propaga los cambios que realiza a sus modelos (agregar un campo, eliminar un modelo, etc.) en el esquema de su base de datos.
makemigrations básicamente genera los comandos SQL para aplicaciones preinstaladas (que se pueden ver en las aplicaciones instaladas en settings.py) y el modelo de las aplicaciones que acaba de crear y que agrega en las aplicaciones instaladas. No ejecuta esos comandos en su archivo de base de datos. Así que las tablas no se crean después de makemigrations.
Después de aplicar makemigrations, puede ver esos comandos SQL con sqlmigrate que muestra todos los comandos SQL que han sido generados por makemigrations.
migrate ejecuta esos comandos SQL en el archivo de la base de datos. Por lo tanto, después de ejecutar la migración, todas las tablas de las aplicaciones instaladas se crean en el archivo de la base de datos.
Puede ajustarse a esto instalando el navegador sqlite y abriendo db.sqlite3 puede ver todas las tablas que aparecen en el archivo de la base de datos después de ejecutar el comando migrate.
Como sabemos, Django es un ORM (mapeo relacional de objetos). Cuando usamos el comando:
python manage.py makemigrations [nombre_aplicación]
Generará el comando sql para crear la tabla correspondiente a cada clase que creó en el archivo models.py. entonces el comando:
python manage.py migrate [app_name]
creará la tabla en la base de datos usando los comandos que han sido generados por makemigrations.
Por ejemplo, si hacemos un modelo de clase-
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
El comando sql correspondiente después de usar makemigrations será
CREATE TABLE myapp_person (
"id" serial NOT NULL PRIMARY KEY,
"first_name" varchar(30) NOT NULL,
"last_name" varchar(30) NOT NULL
);
y usando el comando anterior, la tabla se creará en la base de datos cuando usemos migrar.
Debe ejecutar el comando -migrar- después de agregar una nueva aplicación en la sección APLICACIONES INSTALADAS en el archivo settings.py para sincronizar el estado de la base de datos con su conjunto actual de modelos. Suponiendo que ya has modificado el archivo models.py.
Cuando ejecuta -makemigrations-, empaqueta los cambios a su modelo en archivos de migración individuales.
Normalmente, primero ejecutaría makemigrations y luego migraría.
Este es el reemplazo de django de la antigua forma manual de realizar migraciones, que se pueden usar para catalogar los cambios en sus modelos y escribir los cambios que se llevarán a cabo en la base de datos.
Migrar es básicamente el antiguo syncdb pero tiene en cuenta todas las migraciones realizadas por makemigrations.
Según el tutorial de Encuestas :
python manage.py makemigrations <app>
:python manage.py makemigrations <app>
las migraciones (genera los comandosSQL
).python manage.py migrate
: ejecuta las migraciones (ejecuta los comandosSQL
).