2015-05-01 18 views
16

Zgodnie z dokumentacją tutaj: https://docs.djangoproject.com/en/1.8/topics/migrations/ ona mówi:Django 1.8 - jaka jest różnica między migracją a makemigracjami?

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

i

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

Z tego co rozumiem, po raz pierwszy zrobić

makemigrations 

utworzyć plik migracji, a następnie do

migrate 

w celu rzeczywistego zastosowania migracji?

Pamiętaj jednak, że właśnie rozpocząłem projekt Django i dodałem moją aplikację do listy "installed_apps". Potem zrobiłem

python manage.py runserver 

i powiedział

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

Nie wspomina nic o prowadzeniu makemigrations.

+4

Framework django potrzebuje kilku tabel bazy danych - przykład: session, content_type, serwis, dla którego już utworzył migracje. Pojawia się komunikat, że te "domyślne" migracje nie zostały jeszcze zastosowane. Aby uruchomić serwer migracji, po raz pierwszy uruchom serwer. – karthikr

+0

@karthikr O okej. Czy w mojej sytuacji, od kiedy dodałem moją aplikację do "installed_apps", jeszcze zanim wykonałem wstępną "migrację", czy oznacza to, że powinienem najpierw uruchomić "makemigration", a następnie "migrować"? – user2719875

+1

Tak. Wtedy tworzone są migracje dla Twojej aplikacji. Następnym krokiem jest zastosowanie utworzonych migracji – karthikr

Odpowiedz

3

To jest zamiennik django na stary, ręczny sposób wykonywania migracji na południe. Mogą one służyć do katalogowania zmian w modelach i zapisywania zmian, które będą miały miejsce w bazie danych.

Migracja to zasadniczo stary syncdb, ale uwzględnia wszystkie migracje wykonane przez makemigracje.

2

Należy uruchomić polecenie - migracja - po dodaniu nowej aplikacji w sekcji ZAINSTALOWANE APLIKACJE w pliku settings.py, aby zsynchronizować stan bazy danych z bieżącym zestawem modeli. Zakładając, że już zmodyfikowałeś plik models.py.

Po uruchomieniu -makemigrations - pakietuje zmiany do modelu w osobne pliki migracji.

Zazwyczaj najpierw należy uruchomić makemigracje, a następnie przeprowadzić migrację.

See documentation on Django Models

12

Zgodnie z Polls tutorial:

  1. python manage.py makemigrations <app>: Tworzenie migracje (generowanie poleceń SQL).

  2. python manage.py migrate: Uruchom migrację (wykonaj komendy SQL).

2

Jak Django documentation mówi Migracje są sposobem Django rozmnożeniowego zmiany wprowadzone do modeli (dodając pole, usuwanie modelu itd) do swojego schematu bazy danych.

makemigrations zasadzie generuje polecenia SQL dla preinstalowanych aplikacji (które mogą być wyświetlane w aplikacjach zainstalowanych w settings.py) i modelowych Nowo utworzone aplikacje, które dodasz w zainstalowanych aplikacjach.Nie wykonuje tych poleceń w pliku bazy danych. Tak więc tabele nie są tworzone po makemigrations.

Po zastosowaniu makemigrations widać tych poleceń SQL z sqlmigrate który pokazuje wszystkie polecenia SQL, które zostały wygenerowane przez makemigrations.

Migrate wykonuje te polecenia SQL w bazie file.So po wykonaniu migracji wszystkie tabele z zainstalowanych aplikacji tworzonych w pliku bazy danych.

Możesz tego dokonać instalując sqlite browser i otwierając db.sqlite3 możesz zobaczyć, że wszystkie tabele pojawiają się w pliku bazy danych po wykonaniu polecenia migrate.

1

Jak wiemy, Django to ORM (Mapowanie obiektowe). Gdy używamy polecenia:

python manage.py makemigrations [APP_NAME]

będzie generować sql polecenie, aby utworzyć tabelę odpowiadającą każdej klasy utworzonego w models.py pliku. następnie polecenie:

pyton manage.py migracji [nazwa_aplikacji]

utworzy tablicę w bazie danych przy wykorzystaniu polecenia, które zostały wygenerowane przez makemigrations.

Na przykład, jeśli robimy to model wykładowa

from django.db import models 

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

Odpowiednia komenda SQL po użyciu makemigrations będzie

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

i stosując powyższe polecenia, tabela zostanie utworzona w bazie danych, gdy używamy migracji.