Subjects

All subjects Django Java Python React Spring Boot JavaScript PHP
Sign Up Free
Interview question

What are Django Migrations and how do you manage database schema changes? Django Migrations क्या हैं? Database schema changes कैसे manage करते हैं?

Answer

Migrations are version control for database schema. Django automatically detects model changes and generates migration files. Use makemigrations to create migrations and migrate to apply them. Manage schema changes safely without data loss.

// Migration Workflow

// Step 1: Create migration files
python manage.py makemigrations
// Detects changes in models.py
// Generates migration files in migrations/ folder

// Step 2: Review migrations
cat myapp/migrations/0001_initial.py

// Step 3: Apply migrations
python manage.py migrate
// Runs all unapplied migrations
// Updates database schema

// Step 4: Verify
python manage.py showmigrations
// Shows which migrations are applied

// Example Migration File
# myapp/migrations/0001_initial.py
from django.db import migrations, models

class Migration(migrations.Migration):
    initial = True
    dependencies = []
    
    operations = [
        migrations.CreateModel(
            name='Product',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=200)),
                ('price', models.DecimalField(decimal_places=2, max_digits=10)),
                ('created_at', models.DateTimeField(auto_now_add=True)),
            ],
        ),
    ]

// Migration for Field Change
# myapp/migrations/0002_add_quantity.py
from django.db import migrations, models

class Migration(migrations.Migration):
    dependencies = [
        ('myapp', '0001_initial'),
    ]
    
    operations = [
        migrations.AddField(
            model_name='product',
            name='quantity',
            field=models.IntegerField(default=0),
        ),
    ]

// Common Migration Operations

// Add field
migrations.AddField(
    model_name='product',
    name='description',
    field=models.TextField(default=''),
)

// Remove field
migrations.RemoveField(
    model_name='product',
    name='old_field',
)

// Rename field
migrations.RenameField(
    model_name='product',
    old_name='price',
    new_name='selling_price',
)

// Alter field
migrations.AlterField(
    model_name='product',
    name='price',
    field=models.DecimalField(decimal_places=3, max_digits=10),
)

// Create model
migrations.CreateModel(
    name='Category',
    fields=[
        ('id', models.BigAutoField(primary_key=True)),
        ('name', models.CharField(max_length=100)),
    ],
)

// Delete model
migrations.DeleteModel(
    name='OldModel',
)

// Data migration - modify existing data
python manage.py makemigrations --empty myapp --name populate_data

# Then edit the migration file
from django.db import migrations

def populate_categories(apps, schema_editor):
    Product = apps.get_model('myapp', 'Product')
    for product in Product.objects.all():
        # Modify data
        pass

class Migration(migrations.Migration):
    dependencies = [
        ('myapp', '0002_previous_migration'),
    ]
    
    operations = [
        migrations.RunPython(populate_categories),
    ]

// Useful Commands
python manage.py makemigrations              # Create migration files
python manage.py makemigrations myapp        # Only for myapp
python manage.py migrate                     # Apply all migrations
python manage.py migrate myapp               # Apply only myapp migrations
python manage.py migrate myapp 0002          # Migrate to specific version
python manage.py migrate myapp zero          # Revert all migrations
python manage.py showmigrations              # Show migration status
python manage.py sqlmigrate myapp 0001      # Show SQL for migration
python manage.py makemigrations --dry-run    # Preview changes

// Best Practices
// 1. Run makemigrations after model changes
// 2. Review generated migrations before applying
// 3. Test migrations on development first
// 4. Never modify applied migrations
// 5. Create new migration for changes
// 6. Use data migrations for data transformation
// 7. Version control all migration files
// 8. Keep migrations atomic (single purpose)
Django Migrations:

Kya हैं:
Database schema का version control

Workflow:
1. Model change करो
2. python manage.py makemigrations
3. Review migration files
4. python manage.py migrate
5. Database updated

Migration File:
Operations define करते हैं
- CreateModel
- AddField
- RemoveField
- AlterField
- RenameField

Data Migration:
Data transform करने के लिए
RunPython operation use करना

Commands:
makemigrations - Create files
migrate - Apply migrations
showmigrations - Show status
sqlmigrate - Show SQL

Best Practice:
- Review migrations
- Test पहले
- Never modify applied
- Atomic changes
- Version control

Benefit:
- Safe schema changes
- Rollback capability
- History tracking
- Collaboration friendly

Was this answer clear?