2015-05-01 13 views
16

Nach der Dokumentation: https://docs.djangoproject.com/en/1.8/topics/migrations/ heißt es:Django 1.8 - Was ist der Unterschied zwischen Migration und Makemigrationen? hier

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

und

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

Von dem, was ich verstehe, kann ich erste

makemigrations 

die Migrationsdatei zu erstellen und dann tun

migrate 

tatsächlich die Migration anwenden?

Beachten Sie jedoch, dass ich gerade mein Django-Projekt gestartet habe und meine App zu meiner "installed_apps" -Liste hinzugefügt habe. Danach habe ich

python manage.py runserver 

und es sagte

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

Es erwähnen nichts über makemigrations läuft.

+4

Das django-Framework benötigt ein paar Datenbanktabellen - Beispiel: session, content_type, site, für die es bereits Migrationen erstellt hat. Die angezeigte Nachricht besagt, dass diese "Standard" -Migrationen noch nicht angewendet wurden. Also würden Sie migrieren, bevor Sie den Server zum ersten Mal starten – karthikr

+0

@karthikr Oh okay. In meiner Situation, also habe ich meine App zu "installed_apps" hinzugefügt, noch bevor ich die "migration" gemacht habe, heißt das, dass ich jetzt zuerst "makemigration" ausführen und dann "migrieren" sollte? – user2719875

+1

Ja. In diesem Fall werden die Migrationen für Ihre App erstellt. Der nächste Schritt besteht darin, diese erstellten Migrationen anzuwenden – karthikr

Antwort

3

Dies ist Djangos Ersatz für den alten manuellen Weg, Migrationen zu machen, sie können verwendet werden, um Änderungen in Ihren Modellen zu katalogisieren und Änderungen auszugeben, die in der Datenbank stattfinden.

Migrieren ist grundsätzlich die alte syncdb, berücksichtigt jedoch alle Migrationen, die durch Makemigrationen vorgenommen werden.

2

Sie sollten den Befehl -migrate- nach dem Hinzufügen einer neuen App im Abschnitt INSTALLED APPS in der Datei settings.py ausführen, um den Datenbankstatus mit Ihrer aktuellen Modellgruppe zu synchronisieren. Angenommen, Sie haben die Datei models.py bereits geändert.

Wenn Sie -makemigrations- ausführen, packt es Änderungen an Ihrem Modell in einzelne Migrationsdateien.

Normalerweise würden Sie zuerst Makemigrationen ausführen und dann migrieren.

See documentation on Django Models

12

Nach den Polls tutorial:

  1. python manage.py makemigrations <app>: die Migrationen erstellen (erzeugen die SQL Befehle).

  2. python manage.py migrate: Führen Sie die Migrationen aus (führen Sie die Befehle SQL aus).

2

Als Djangos documentation sagt Migrations Weg Djangos sind Änderungen von Vermehrungs Sie Ihre Modelle machen (das Hinzufügen eines Feldes, ein Modell zu löschen, etc.) in das Datenbankschema.

makemigrations erzeugt im Grunde die SQL für vorinstallierte Apps-Befehle (die in installierten Anwendungen in settings.py angesehen werden kann) und die neu Modell erstellt Apps', die Sie in installierten Anwendungen hinzuzufügen.Es führt diese Befehle in Ihrer Datenbankdatei nicht aus. So Tabellen erstellt nicht nach Makemigrationen.

Nach makemigrations Anwendung können Sie diese SQL-Befehle mit sqlmigrate sehen, die alle SQL-Befehle zeigt, die von makemigrations erzeugt wurde.

Migrate führt diese SQL-Befehle in der Datenbank file.So nachdem alle Tabellen Ihrer installierten Anwendungen ausführen Migration in Ihrer Datenbankdatei erstellt werden.

Sie können dies anpassen, indem Sie sqlite browser installieren und db.sqlite3 öffnen. Sie können sehen, dass alle Tabellen nach dem Ausführen des migration-Befehls in der Datenbankdatei angezeigt werden.

1

Wie wir wissen, ist Django ein ORM (Object Relational Mapping). Wenn wir den Befehl:

Python manage.py makemigrations [app_name]

Es wird die SQL-Befehl zu erzeugen, um die Tabelle zu erstellen, um jede Klasse entspricht, die Sie in models.py Datei vorgenommen. dann der Befehl:

Python manage.py wandern [app_name]

wird die Tabelle in der Datenbank mit den Befehlen erstellen, die von makemigrations generiert wurden.

Zum Beispiel, wenn wir ein Modell machen klassen

from django.db import models 

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

Der entsprechende SQL-Befehl makemigrations nach der Verwendung wird

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

und obiger Befehl verwendet, wird Tabelle in der Datenbank erstellt werden, wenn Wir verwenden migrieren.