Alembic Migrations¶
Alembic là gì?¶
Alembic là tool quản lý database schema migration cho SQLAlchemy. Thay vì chạy SQL thủ công, Alembic tự động detect thay đổi trong models và tạo migration scripts.
Các lệnh thường dùng¶
Tạo migration mới (auto-detect)¶
Alembic sẽ so sánh models hiện tại với database và tạo file migration trong thư mục migrations/versions/.
Best practice
Luôn viết message mô tả rõ ràng, ví dụ: "Add users table", "Add email column to courses".
Chạy migration (upgrade)¶
Rollback migration (downgrade)¶
Xem trạng thái hiện tại¶
Workflow khi thay đổi database¶
graph LR
A["Sửa models/*.py"] --> B["alembic revision<br/>--autogenerate"]
B --> C["Review file migration"]
C --> D["alembic upgrade head"]
D --> E["Test trên local"]
E --> F["Commit & Push"] Step-by-step¶
- Sửa model — Thêm/sửa/xóa column trong
models/*.py - Tạo migration:
- Review — Mở file vừa tạo trong
migrations/versions/, kiểm traupgrade()vàdowngrade() - Chạy local:
- Test — Verify database đã thay đổi đúng
- Commit — Push migration file lên Git
Không bao giờ sửa migration đã chạy trên production
Nếu cần sửa, tạo migration mới để thay đổi. Migration đã apply trên prod = lịch sử, không được edit.
Chạy migration trên các môi trường¶
Nhớ đổi lại DATABASE_URL
Sau khi chạy migration cho staging/prod, nhớ đổi .env về giá trị local dev.
Xử lý Conflicts¶
Khi 2 developer tạo migration cùng lúc:
- Pull code mới nhất
- Xóa migration file bị conflict (của mình)
- Tạo lại migration:
- Chạy
alembic upgrade head