web-dev-qa-db-fra.com

Django 1.8 - quelle est la différence entre migrer et faire des migrations?

Selon la documentation ici: https://docs.djangoproject.com/en/1.8/topics/migrations/ il dit:

migrate, which is responsible for applying migrations, as well as unapplying and listing their status.

et

makemigrations, which is responsible for creating new migrations based on the changes you have made to your models.

D'après ce que je comprends, je fais d'abord

makemigrations

pour créer le fichier de migration, puis faites

migrate

appliquer réellement la migration?

Notez cependant que je viens de commencer mon projet Django et j'ai ajouté mon application à ma liste "installed_apps". Après cela, j'ai fait

python manage.py runserver

et il a dit

You have unapplied migrations; your app may not work properly until they are applied. Run 'python manage.py migrate' to apply them.

Il ne mentionne rien sur l'exécution de makemigrations.

34
user2719875

Selon le tutoriel sondages :

  1. python manage.py makemigrations <app>: Créez les migrations (générez les commandes SQL).

  2. python manage.py migrate: Exécutez les migrations (exécutez les commandes SQL).

31
Hakim

Comme le dit documentation de Django, les migrations sont la façon dont Django propage les modifications que vous apportez à vos modèles (ajout d'un champ, suppression d'un modèle, etc.) dans votre schéma de base de données.

makemigrations génère essentiellement les commandes SQL pour les applications préinstallées (qui peuvent être consultées dans les applications installées dans settings.py) et le modèle de vos applications nouvellement créées que vous ajoutez dans les applications installées. Il n'exécute pas ces commandes dans votre fichier de base de données. Donc les tables ne sont pas créées après les migrations .

Après avoir appliqué makemigrations, vous pouvez voir ces commandes SQL avec sqlmigrate qui montre toutes les commandes SQL qui ont été générées par makemigrations .

migrate exécute ces commandes SQL dans le fichier de base de données. Ainsi, après l'exécution de la migration, toutes les tables de vos applications installées sont créées dans votre fichier de base de données.

Vous pouvez le conformer en installant navigateur sqlite et en ouvrant db.sqlite3, vous pouvez voir toutes les tables apparaître dans le fichier de base de données après avoir exécuté la commande migrate.

14
Rajat Bhatt

Comme nous le savons Django est un ORM (Object Relational Mapping). Lorsque nous utilisons la commande:

python manage.py makemigrations [nom_app]

Il générera la commande sql pour créer la table correspondant à chaque classe que vous avez créée dans le fichier models.py. puis la commande:

python manage.py migrate [nom_app]

créera la table dans la base de données en utilisant les commandes qui ont été générées par makemigrations.

Par exemple, si nous faisons un modèle class-

from Django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)

La commande sql correspondante après avoir utilisé makemigrations sera

CREATE TABLE myapp_person (
"id" serial NOT NULL PRIMARY KEY,
"first_name" varchar(30) NOT NULL,
"last_name" varchar(30) NOT NULL
);

et en utilisant la commande ci-dessus, la table sera créée dans la base de données lorsque nous utiliserons la migration.

9
bSr

Vous devez exécuter la commande -migrate- après avoir ajouté une nouvelle application sous la section INSTALLED APPS du fichier settings.py afin de synchroniser l'état de la base de données avec votre ensemble actuel de modèles. En supposant que vous avez déjà modifié le fichier models.py.

Lorsque vous exécutez -makemigrations-, il regroupe les modifications apportées à votre modèle dans des fichiers de migration individuels.

Normalement, vous devez d'abord exécuter makemigrations, puis migrer.

Voir la documentation sur Django Models

2
deadcandance72

Ceci est le remplacement de Django pour l'ancienne façon manuelle du sud de faire des migrations, ils peuvent être utilisés pour cataloguer les changements dans vos modèles et écrire les changements qui auront lieu dans la base de données.

Migrate est fondamentalement l'ancien syncdb mais il prend en compte toutes les migrations effectuées par makemigrations.

2
Mikeec3