2015-05-01 18 views
16

Secondo la documentazione qui: https://docs.djangoproject.com/en/1.8/topics/migrations/ dice:Django 1.8 - qual è la differenza tra migrare e makemigrations?

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

e

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

Da quello che ho capito, ho faccio

makemigrations 

per creare il file di migrazione e quindi do

migrate 

per applicare effettivamente la migrazione?

Nota che ho appena iniziato il mio progetto Django e ho aggiunto la mia app alla mia lista "installed_apps". Dopo di che, ho fatto

python manage.py runserver 

e ha detto

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

Essa non ha menzionato nulla in esecuzione makemigrations.

+4

Il framework django richiede alcune tabelle di database, ad esempio: session, content_type, sito per il quale sono già state create migrazioni. Il messaggio che vedi è che quelle migrazioni "predefinite" non sono ancora state applicate. Quindi, eseguiresti la migrazione prima di avviare il server per la prima volta – karthikr

+0

@karthikr Oh okay. Quindi, nella mia situazione, dal momento che ho aggiunto la mia app a "installed_apps" anche prima di eseguire la "migrazione" iniziale, significa che ora dovrei eseguire "makemigration" e poi "migrare"? – user2719875

+1

Sì. Questo è il momento in cui vengono create le migrazioni per la tua app. Il prossimo passo è applicare le migrazioni create – karthikr

risposta

3

Questo è il rimpiazzo di django per il vecchio modo manuale di eseguire le migrazioni a sud, possono essere utilizzati per catalogare le modifiche nei modelli e scrivere le modifiche che si svolgeranno nel db.

La migrazione è fondamentalmente il vecchio syncdb ma tiene conto di tutte le migrazioni effettuate da makemigrations.

2

È necessario eseguire il comando -migrate- dopo aver aggiunto una nuova app nella sezione APPS INSTALLATA nel file settings.py per sincronizzare lo stato del database con il set corrente di modelli. Supponendo che tu abbia già modificato il file models.py.

Quando si esegue -makemigrations- impacchetta le modifiche al modello in singoli file di migrazione.

Normalmente si eseguono prima le makemigrations e quindi si esegue la migrazione.

See documentation on Django Models

12

Secondo il Polls tutorial:

  1. python manage.py makemigrations <app>: Creare le migrazioni (generare i comandi SQL).

  2. python manage.py migrate: Eseguire le migrazioni (eseguire i comandi SQL).

2

Come Django di documentation dice migrazioni sono il modo di Django di propagare le modifiche apportate ai modelli (aggiunta di un campo, l'eliminazione di un modello, ecc) nel vostro schema del database.

makemigrations genera fondamentalmente i comandi SQL per le applicazioni preinstallate (che possono essere visualizzati in applicazioni installate in settings.py) e il modello le tue applicazioni di nuova creazione, che si aggiunge in applicazioni installate.Non esegue quei comandi nel file di database. Quindi le tabelle non vengono create dopo le makemigrations.

Dopo l'applicazione makemigrations è possibile vedere i comandi SQL quelli con sqlmigrate che mostra tutti i comandi SQL, che è stato generato da makemigrations.

migrazione esegue i comandi SQL nel database file.So dopo aver eseguito la migrazione di tutte le tabelle delle vostre applicazioni installate vengono creati nel file di database.

È possibile conformare questo installando sqlite browser e aprendo db.sqlite3 è possibile visualizzare tutte le tabelle visualizzate nel file di database dopo l'esecuzione del comando migrate.

1

Come sappiamo Django è un ORM (Mappatura relazionale oggetto). Quando usiamo il comando:

makemigrations python manage.py [APP_NAME]

Si genereranno il comando SQL per creare la tabella corrispondente ad ogni classe che hai fatto nel file di models.py. allora il comando:

pitone manage.py migrazione [APP_NAME]

creerà la tabella nel database utilizzando i comandi che sono stati generati da makemigrations.

Ad esempio, se facciamo un modello Class-

from django.db import models 

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

il comando SQL corrispondente dopo usando makemigrations sarà

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

e utilizzando comando precedente, tabella verrà creata nel database quando usiamo migriamo.