Migration trong Python là quá trình giúp quản lý và theo dõi các thay đổi trong cấu trúc cơ sở dữ liệu. Thay vì chỉnh sửa cơ sở dữ liệu trực tiếp, migration cho phép tự động hóa các thay đổi bằng cách sử dụng các file migration, giúp duy trì tính nhất quán giữa mã nguồn và cơ sở dữ liệu. Hệ thống migration thường được sử dụng trong các framework Python như Django và SQLAlchemy.
Migration là quá trình tự động hóa các thay đổi trong cấu trúc cơ sở dữ liệu, bao gồm các hành động như:
Thay vì chạy trực tiếp các câu lệnh SQL, migration cho phép sử dụng các file để ghi lại và thực thi các thay đổi. Điều này giúp duy trì tính nhất quán giữa các môi trường phát triển và triển khai, đồng thời theo dõi lịch sử thay đổi cơ sở dữ liệu.
Django là một framework web mạnh mẽ trong Python và tích hợp sẵn hệ thống migration. Khi bạn thay đổi mô hình dữ liệu (model) trong Django, hệ thống migration sẽ tự động tạo các file để thực hiện các thay đổi đó trên cơ sở dữ liệu.
Trước tiên, bạn cần có một ứng dụng Django đã được tạo và cấu hình cơ sở dữ liệu.
alembic/
Khi có thay đổi trong model SQLAlchemy, bạn tạo migration bằng lệnh:
alembic revision --autogenerate -m "add price column to book"
Lệnh này sẽ tự động tạo một migration mới dựa trên thay đổi của model.
Để áp dụng migration lên cơ sở dữ liệu, chạy lệnh:
alembic upgrade head
Giả sử bạn có một model Book trong SQLAlchemy như sau:
from sqlalchemy import Column, Integer, String, Date class Book(Base): __tablename__ = 'book' id = Column(Integer, primary_key=True) title = Column(String(100)) author = Column(String(50)) published_date = Column(Date)
Nếu sau đó bạn thêm trường price:
class Book(Base): __tablename__ = 'book' id = Column(Integer, primary_key=True) title = Column(String(100)) author = Column(String(50)) published_date = Column(Date) price = Column(Integer)
Tạo migration mới và áp dụng:
alembic revision --autogenerate -m "add price column to book" alembic upgrade head
python manage.py makemigrations
python manage.py migrate
python manage.py showmigrations
python manage.py migrate app_name migration_name
alembic init alembic
alembic revision --autogenerate -m "message"
alembic upgrade head
alembic downgrade base
Migration là một công cụ quan trọng trong việc quản lý cơ sở dữ liệu trong các ứng dụng Python, giúp tự động hóa các thay đổi và duy trì tính nhất quán giữa mã nguồn và cơ sở dữ liệu. Với Django và Alembic, việc thực hiện migration trở nên đơn giản và có tổ chức hơn, từ đó giúp cho quá trình phát triển và triển khai ứng dụng web hiệu quả hơn.