Lesson 14 / 26
Applying Migrations
migrate brings the database up to date.
Tracked in django_migrations
python manage.py migrate applies unapplied migrations in dependency order and records them in the django_migrations table, so each runs once per database. Built-in apps (auth, admin, sessions, contenttypes) bring their own migrations. In deployment, run migrate as a separate step before (or as part of) releasing new code, and design changes to be backward compatible with the previous code version during rollout.
Applying migrations, run
I ran this with Django 6.1.1 and Python 3.12 in a demo project (shopsite with a catalog app) using SQLite. Output trimmed to the plan, the first auth migration and the catalog migration; every migration reported OK.
python manage.py migrate
Output:
Operations to perform: Apply all migrations: admin, auth, catalog, contenttypes, sessions Applying auth.0001_initial... OK Applying catalog.0001_initial... OK
Expand, then contract
Add new columns first and remove old ones in a later release, so old and new code can run during the rollout.
Quick check: How does Django know which migrations already ran?
- It reruns all migrations every time
- It reads file timestamps
- It asks the user
- It records them in the django_migrations table
Answer
It records them in the django_migrations table — Applied migrations are tracked.