1. Home
  2. FastApi
  3. Basic Fundamental
  4. Day 3 : প্রফেশনাল মাইগ্রেশন গাইড: Alembic (The Industry Standard)

Day 3 : প্রফেশনাল মাইগ্রেশন গাইড: Alembic (The Industry Standard)

চমৎকার! 🎉 নিচে তোমার টিউটোরিয়ালটিকে 🌐 ব্লগ পোস্ট ফরম্যাটে সাজিয়ে দিচ্ছি — সরাসরি ওয়েবসাইট, WordPress, Medium বা Dev.to তে পোস্ট করা যাবে।


Alembic Migration Tutorial – FastAPI প্রজেক্টের জন্য বাংলায় সম্পূর্ণ প্রফেশনাল গাইড

ডাটাবেস স্কিমা ম্যানেজমেন্ট ছাড়া কোনো প্রফেশনাল API প্রজেক্ট কল্পনাই করা যায় না। যদি আপনি FastAPI ব্যবহার করেন এবং প্রোডাকশন-গ্রেড অ্যাপ বানাতে চান, তাহলে Alembic জানা অবশ্যই প্রয়োজন

এই ব্লগ পোস্টে আমরা শিখব:

  • Alembic কী এবং কেন ব্যবহার করবেন
  • কীভাবে সেটআপ করবেন
  • কীভাবে migration তৈরি, চালানো ও রোলব্যাক করবেন
  • রিয়েল লাইফ উদাহরণসহ পুরো প্রক্রিয়া

🚀 Alembic কী এবং কেন ব্যবহার করবেন?

প্রফেশনাল লেভেলে কেউই আর Base.metadata.create_all() ব্যবহার করে ডাটাবেস হ্যান্ডেল করেন না। কারণ:

✅ প্রোডাকশনে ডাটাবেস ডিলিট করা যায় না
✅ নতুন কলাম, টেবিল, ইনডেক্স যুক্ত করতে হয়
✅ পরিবর্তনের ইতিহাস রাখতে হয়
✅ টিমে কাজ করার সময় সবাইকে একই স্কিমা ব্যবহার করতে হয়

👉 Alembic হল Django Migration সিস্টেমের মতোই একটি ইন্ডাস্ট্রি স্ট্যান্ডার্ড টুল।


🗂️ প্রজেক্ট স্ট্রাকচার বোঝা

আমরা ধরছি আপনার প্রজেক্ট স্ট্রাকচার এমন:

app/
├── main.py
├── db/
   └── session.py
└── apps/
    └── students/
        ├── models.py
        ├── routes.py
        └── schemas.py

alembic/
├── env.py
├── script.py.mako
└── versions/

alembic.ini
sql_app.db

⚙️ ধাপ ০: Alembic ইনস্টল করা

pip install alembic

🛠️ ধাপ ১: Alembic ইনিশিয়ালাইজ করা

alembic init alembic

এতে তৈরি হবে:

  • alembic/ ফোল্ডার
  • alembic.ini কনফিগ ফাইল

🔧 ধাপ ২: কনফিগারেশন (সবচেয়ে গুরুত্বপূর্ণ অংশ)

✏️ ২.১ alembic.ini ফাইল এডিট

sqlalchemy.url = sqlite:///./sql_app.db

✏️ ২.২ alembic/env.py ফাইল এডিট

import sys
from os.path import abspath, dirname

sys.path.insert(0, dirname(dirname(abspath(__file__))))

from app.db.session import Base
from app.apps.students.models import Student

তারপর:

target_metadata = Base.metadata

এবং run_migrations_online() ফাংশনে:

context.configure(
    connection=connection,
    target_metadata=target_metadata,
    render_as_batch=True
)

🧱 ধাপ ৩: প্রথম Migration তৈরি করা

alembic revision --autogenerate -m "Create students table"

এই কমান্ড চালালে alembic/versions/ ফোল্ডারে একটি নতুন ফাইল তৈরি হবে।

উদাহরণ:

def upgrade() -> None:
    op.create_table('students',
        sa.Column('id', sa.Integer(), nullable=False),
        sa.Column('name', sa.String(), nullable=True),
        sa.Column('email', sa.String(), nullable=True),
        sa.Column('age', sa.Integer(), nullable=True),
        sa.Column('phone', sa.String(), nullable=True),
        sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_students_email'), 'students', ['email'], unique=True)

def downgrade() -> None:
    op.drop_index(op.f('ix_students_email'), table_name='students')
    op.drop_table('students')

▶️ ধাপ ৪: Migration চালানো

alembic upgrade head

এই কমান্ড চালালে:

  • সব pending migration রান হবে
  • ডাটাবেসে টেবিল তৈরি হবে
  • alembic_version টেবিল আপডেট হবে

📊 ধাপ ৫: Migration স্ট্যাটাস চেক করা

alembic current
alembic history
alembic show xxxxx

🔄 রিয়েল লাইফ উদাহরণ

➕ নতুন ফিল্ড যোগ করা

created_at = Column(DateTime, default=datetime.utcnow)
alembic revision --autogenerate -m "Add created_at field to students"
alembic upgrade head

➕ ডিফল্ট ভ্যালু সহ কলাম

status = Column(String, default="active")
alembic revision --autogenerate -m "Add status column"
alembic upgrade head

❌ কলাম ডিলিট করা (সাবধানে!)

# phone ফিল্ড মুছে দিন
alembic revision --autogenerate -m "Remove phone column"
alembic upgrade head

👥 প্রফেশনাল টিম ওয়ার্কফ্লো

1️⃣ মডেল পরিবর্তন করুন
2️⃣ Migration তৈরি করুন
3️⃣ ফাইল রিভিউ করুন
4️⃣ ডাটাবেসে প্রয়োগ করুন
5️⃣ Git এ commit করুন
6️⃣ টিম মেম্বাররা alembic upgrade head চালাবে


⏪ Migration রোলব্যাক করা

alembic downgrade -1
alembic downgrade xxxxx

❗ সাধারণ সমস্যা ও সমাধান

❌ No changes detected

✔️ মডেল সেভ হয়েছে কিনা চেক করুন
✔️ env.py তে সব মডেল ইম্পোর্ট আছে কিনা দেখুন


❌ Target database is not up to date

✔️ চালান:

alembic upgrade head

✏️ Migration ম্যানুয়ালি এডিট করা

def upgrade():
    op.execute("ALTER TABLE students ADD COLUMN status VARCHAR DEFAULT 'active'")

def downgrade():
    op.execute("ALTER TABLE students DROP COLUMN status")

🏆 Best Practices

✔️ প্রতিটি পরিবর্তনের জন্য আলাদা migration
✔️ Migration চালানোর আগে রিভিউ
✔️ Git এ commit করা
✔️ Production এ আগে backup নেওয়া
✔️ Staging এ টেস্ট করা


⚡ দ্রুত রেফারেন্স

কমান্ডকাজ
alembic revision --autogenerate -m "msg"নতুন migration
alembic upgrade headসব migration চালানো
alembic downgrade -1এক ধাপ রোলব্যাক
alembic currentবর্তমান ভার্সন
alembic historyসব migration
alembic show xxxxxনির্দিষ্ট migration

✅ এখনই শুরু করুন

alembic revision --autogenerate -m "Initial migration"
alembic upgrade head
alembic current

আপনার ডাটাবেস এখন প্রোডাকশন-রেডি! 🚀


🔗 আরও রিসোর্স


চাইলে আমি এটাকে:

  • 🧾 WordPress Gutenberg ব্লক
  • 📄 PDF
  • 📘 Markdown
  • 📢 LinkedIn পোস্ট
    ফরম্যাটেও সাজিয়ে দিতে পারি।

How can we help?