Django 1.8 - what's the difference between migrate and makemigrations? Django 1.8 - what's the difference between migrate and makemigrations? django django

Django 1.8 - what's the difference between migrate and makemigrations?


According the Polls tutorial:

  1. python manage.py makemigrations <app>: Create the migrations (generate the SQL commands).

  2. python manage.py migrate: Run the migrations (execute the SQL commands).


As Django's documentation says Migrations are Django’s way of propagating changes you make to your models (adding a field, deleting a model, etc.) into your database schema.

makemigrations basically generates the SQL commands for preinstalled apps (which can be viewed in installed apps in settings.py) and your newly created apps' model which you add in installed apps.It does not execute those commands in your database file. So tables doesn't created after makemigrations.

After applying makemigrations you can see those SQL commands with sqlmigrate which shows all the SQL commands which has been generated by makemigrations.

migrate executes those SQL commands in database file.So after executing migrate all the tables of your installed apps are created in your database file.

You can conform this by installing sqlite browser and opening db.sqlite3 you can see all the tables appears in the database file after executing migrate command.


As we know Django is an ORM (Object Relational Mapping). When we use the command:

python manage.py makemigrations [app_name]

It will generate the sql command to create the table corresponding to each class you made in models.py file.then the command:

python manage.py migrate [app_name]

will create the table in database using the commands which have been generated by makemigrations.

For example, if we make a model class-

from django.db import modelsclass Person(models.Model):    first_name = models.CharField(max_length=30)    last_name = models.CharField(max_length=30)

The corresponding sql command after using makemigrations will be

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

and using above command, table will be created in the database when we use migrate.