در جنگو، Migrations به فرآیندی گفته میشود که به شما کمک میکند تا تغییرات ساختاری در پایگاه داده (مثل اضافه کردن یا حذف جداول، فیلدها، و ارتباطات بین مدلها) را به طور خودکار اعمال کنید. این ویژگی، با کمک فایلهای مهاجرت که جنگو تولید میکند، به راحتی مدیریت تغییرات پایگاه داده را انجام میدهد.
۱. چرا Migrations در جنگو مهم است؟
مفهوم مهاجرت در جنگو برای همگامسازی مدلها و پایگاه دادهها طراحی شده است. وقتی شما مدلهای جدیدی ایجاد میکنید یا مدلهای موجود را تغییر میدهید، جنگو باید این تغییرات را به پایگاه داده منتقل کند تا دادهها به درستی ذخیره شوند.
Migrations در جنگو به شما این امکان را میدهد که:
- تغییرات مدلها را به طور خودکار در پایگاه داده اعمال کنید.
- تغییرات را به راحتی بازگشتپذیر کنید.
- به تیمهای توسعهای این امکان را میدهد که تغییرات پایگاه داده را به راحتی به اشتراک بگذارند و اعمال کنند.
۲. نحوه کار Migrations
در جنگو، هر زمان که تغییری در مدلها ایجاد کنید، باید مراحل زیر را انجام دهید:
-
ایجاد مایگریشنها (Migrations): ابتدا باید با استفاده از دستور makemigrations تغییرات جدیدی که در مدلها ایجاد کردهاید را به جنگو اعلام کنید. جنگو این تغییرات را در قالب یک فایل مهاجرت ذخیره میکند.
-
اعمال مایگریشنها (Migrations): پس از ایجاد مایگریشنها، باید آنها را با استفاده از دستور migrate در پایگاه داده اعمال کنید.
۳. دستورهای Migrations
الف. makemigrations
این دستور تغییرات مدلها را شناسایی کرده و فایلهای مهاجرت را ایجاد میکند. به طور پیشفرض، جنگو برای هر مدل جدید یا تغییری که در مدلها ایجاد میشود، یک فایل مهاجرت جدید ایجاد میکند.
مثال:
اگر تغییرات خاصی در یک اپلیکیشن خاص اعمال کردهاید و نمیخواهید تمام پروژه را بررسی کنید، میتوانید نام اپلیکیشن را مشخص کنید:
ب. migrate
این دستور مایگریشنها را که با makemigrations ایجاد شدهاند، در پایگاه داده اعمال میکند. این دستور اطمینان میدهد که پایگاه داده با مدلهای جدید یا تغییرات مدلها همگامسازی شده است.
مثال:
برای اعمال مایگریشنهای یک اپلیکیشن خاص:
ج. showmigrations
این دستور به شما نشان میدهد که کدام مایگریشنها اعمال شدهاند و کدام یک هنوز اعمال نشدهاند. این دستور مفید است تا از وضعیت مهاجرتهای پروژه باخبر شوید.
مثال:
د. sqlmigrate
این دستور به شما کد SQL معادل مایگریشنی که در حال اجراست را نشان میدهد. این امکان را به شما میدهد که ببینید جنگو دقیقاً چه کوئریهایی را برای اعمال مایگریشن در پایگاه داده اجرا میکند.
مثال:
در اینجا 0001 شماره مایگریشنی است که میخواهید کد SQL آن را مشاهده کنید.
۴. فایلهای Migrations
در هر اپلیکیشن جنگو، پوشهای به نام migrations وجود دارد که در آن فایلهای مهاجرت ذخیره میشوند. این فایلها شامل تغییرات پایگاه داده و نحوه اعمال آنها هستند. این فایلها به صورت خودکار توسط جنگو ایجاد میشوند و نباید به طور دستی تغییر داده شوند.
نمونه فایل مهاجرت:
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('myapp', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='book',
name='publisher',
field=models.CharField(max_length=100, null=True),
),
]
در این مثال، یک فیلد جدید به نام publisher به مدل Book اضافه شده است.
۵. برگشت به مایگریشن قبلی (Rollback)
گاهی اوقات ممکن است نیاز به بازگشت به یک مایگریشن قبلی داشته باشید. برای این کار میتوانید از دستور migrate با شماره مایگریشن مورد نظر استفاده کنید. این دستور پایگاه داده را به وضعیت آن مایگریشن خاص باز میگرداند.
مثال:
در اینجا، با بازگشت به شماره مایگریشن 0001، پایگاه داده به وضعیت این مایگریشن برمیگردد.
۶. نکات مهم در مورد Migrations
- مهاجرتها و همکاری تیمی: وقتی شما یا تیم توسعهتان تغییراتی در مدلها ایجاد میکنید، باید فایلهای مهاجرت جدید را به سیستم کنترل نسخه (مثل Git) اضافه کنید تا سایر اعضای تیم بتوانند تغییرات را اعمال کنند.
- مدیریت دادهها: گاهی ممکن است تغییرات مدلها منجر به حذف یا تغییر دادهها شود. باید دقت کنید که دادههایتان از دست نروند. جنگو به شما این امکان را میدهد که با استفاده از دستورات خاص، دادهها را در هنگام مهاجرتها مدیریت کنید.
- سازگاری پایگاه داده: جنگو به طور خودکار SQL مناسب برای پایگاه دادههای مختلف (PostgreSQL, MySQL, SQLite) تولید میکند. با این حال، در پروژههای بزرگ و پیچیده ممکن است نیاز به تنظیمات خاصی برای حفظ سازگاری پایگاه داده داشته باشید.
نتیجهگیری
Migrations ابزار قدرتمند جنگو برای مدیریت تغییرات مدلها و همگامسازی آنها با پایگاه داده است. با استفاده از این ابزار، میتوانید به راحتی تغییرات پایگاه داده را پیگیری، اعمال و مدیریت کنید، و اطمینان حاصل کنید که مدلهای پروژهتان همگام با پایگاه داده هستند.
