Python Django Tutorial: Migration Of Database Models - Part One


In the Python Django framework, the Migration of Database Model is used for making database tables using the model in Django. Django makes the tables of models through python code in Django. When a user creates a direct table in the database without Django code then Django doesn’t give all predefined features to that table. But when creating tables through the Django model then it gives many features like create, retrieve, update and delete records and also gives the facility to add this table model in the admin panel.
First, create a Django project. If you don’t know how to create a Django project follow this URL.
After the successful creation of the Django project now we going to create models step.
  1. Now open the file which is already created in the Django app folder. My Django app folder's name is “main”.
    In python language indentation is very important, if you not follow the indentation of code your project or program will not run. You will get this error most times in python. So always use an editor that knows python language indentation otherwise use 4 spaces below of this symbol colon (:) in any editor. An example is shown in the below snapshot.
  2. After open and write code as below,
    Remember the Indentation from class.
    • Where ->
      • from django.db import models define a subclass of a model
      • UserProfile denotes the table name.
      • class attributes define database fields like name, address, city, state, country
      • models.Charfield denotes the varchar type of data field
      • max_length= is an argument that specifies the size of the VARCHAR data field.
      • Django has any type of data field and any type of argument which makes tables according to type.
    We can make any type of model from the Django code. Django also has very Short techniques that make models flexible.
    This table create database query will be as shown below:
    1. CREATE TABLE "main_userprofile" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "name"   
    2. varchar(30) NOT NULL"address" varchar(50) NOT NULL"city" varchar(60) NOT NULL  
    3. "state" varchar(30) NOT NULL"country" varchar(50) NOT NULL);  
    Django always creates an ID field in tables always with “NOT NULL PRIMARY KEY AUTOINCREMENT”. So if you have any need for it declare the ID field according to you. 

  3. Now we go for further process. Open Command Prompt with the directory of the root folder of the project where you can see file. 
  4. Django uses the SQLite database by default in the configuration of file.
    We can use any database with Django like MySQL, MSSQL, Oracle, and PostgreSQL. Django works better with PostgreSQL because it has some featured libraries inbuilt for this database.
  5. After open Command Prompt write command: “python makemigrations <write your django app name>”.
    Ex: “python makemigrations main”.main is my Django app name.
    This command creates a migration folder in a Django app folder that has file that contain UserProfile model definition. Here 0001 is important for further use in model. I will tell you in the Next tutorials.
  6. After Again write command: “python sqlmigrate <write your Django app name> <Migration file prefix number>”
    EX: “python sqlmigrate main 0001”. Here 0001 denote prefix of file name.
    This above image shows a query of table creation that has an ID field automatically generated. This command makes a table query.
  7. The last step is for making table in a database; write command: “python migrate”,
    This command creates a table in the database . When you type this command you will see in the second line.
    Apply all migrations: main, admin, auth, contenttypes, session -> these are the inbuilt model in Django that create tables automatically when you type this command first time. Their table have many features in Django which already predefine in it.
    When I open the SQLite database you will see these tables as below image:
    Here “main_userprofile” is the table name of the UserProfile Model in Django. Here “main” Django app name. You can change it by.
Now you have successfully migrated Django model. So then we can change this model's attributes like adding or removing attributes then run always two commands.
Above all commands use the first time when you create first-time tables in a database using Django. But after you can only use:
  1. Python makemigrations
  2. Python migrate
Both commands are used always when you edit models. If you want to add another model then use both these commands. There is no requirement of other commands.
  1. Don’t delete migration folder files. Otherwise, models lose their connectivity to the database.
  2. No need for creating the ID field in each table. Django creates it automatically.
  3. If you want to delete a table in the database. Remove table model code in and run above both commands then the table will delete from the database. If you delete the table manually that will create a problem with the model. So don’t manually delete the database table.