Interview question
What are Django migrations and how do they work? Django migrations क्या हैं और ये कैसे काम करती हैं?
Answer
Migrations are Django's way of tracking and applying changes to your database schema over time, generated automatically from changes to your models.py files.
# After modifying models.py (e.g. adding a new field)
# Generate a migration file describing the change
# $ python manage.py makemigrations
# Migrations for 'myapp':
# myapp/migrations/0002_book_isbn.py
# - Add field isbn to book
# Apply the migration to the actual database
# $ python manage.py migrate
# A generated migration file looks like this:
# myapp/migrations/0002_book_isbn.py
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('myapp', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='book',
name='isbn',
field=models.CharField(max_length=13, default=''),
),
]
# Checking migration status
# $ python manage.py showmigrations
# Rolling back to a previous migration
# $ python manage.py migrate myapp 0001
# Viewing the SQL a migration will run without applying it
# $ python manage.py sqlmigrate myapp 0002
# Creating an empty migration for custom data operations
# $ python manage.py makemigrations myapp --empty
def populate_default_isbn(apps, schema_editor):
Book = apps.get_model('myapp', 'Book')
Book.objects.filter(isbn='').update(isbn='UNKNOWN')
class Migration(migrations.Migration):
dependencies = [('myapp', '0002_book_isbn')]
operations = [
migrations.RunPython(populate_default_isbn),
]Migrations Django का तरीका है database schema में समय के साथ होने वाले changes को track और apply करने का, models.py में बदलावों से automatically generate होती हैं।
# models.py बदलने के बाद
# Migration file generate करना
# $ python manage.py makemigrations
# Actual database पर apply करना
# $ python manage.py migrate
# Generated migration file:
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('myapp', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='book',
name='isbn',
field=models.CharField(max_length=13, default=''),
),
]
# Migration status check करना
# $ python manage.py showmigrations
# पिछली migration पर rollback करना
# $ python manage.py migrate myapp 0001
# बिना apply किए SQL देखना
# $ python manage.py sqlmigrate myapp 0002Was this answer clear?