চমৎকার! 🎉 নিচে তোমার টিউটোরিয়ালটিকে 🌐 ব্লগ পোস্ট ফরম্যাটে সাজিয়ে দিচ্ছি — সরাসরি ওয়েবসাইট, 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
আপনার ডাটাবেস এখন প্রোডাকশন-রেডি! 🚀
🔗 আরও রিসোর্স
- Alembic ডকুমেন্টেশন: https://alembic.sqlalchemy.org/
- SQLAlchemy ORM: https://docs.sqlalchemy.org/en/20/orm/
চাইলে আমি এটাকে:
- 🧾 WordPress Gutenberg ব্লক
- 📘 Markdown
- 📢 LinkedIn পোস্ট
ফরম্যাটেও সাজিয়ে দিতে পারি।