SQLAlchemy তে ডেটাবেস টেবিলের সাথে মডেল ম্যাপিং করা হয়, যেখানে Python ক্লাস (অথবা মডেল) ডেটাবেস টেবিলের জন্য একটি প্রতিনিধিত্ব হিসেবে কাজ করে। ORM (Object Relational Mapping) এর মাধ্যমে, আমরা ডেটাবেস টেবিলের কলামগুলোকে Python ক্লাসের অ্যাট্রিবিউট (অথবা বৈশিষ্ট্য) হিসেবে ম্যাপ করি।
এই ম্যাপিং প্রক্রিয়াটি SQLAlchemy ORM এর মূল ধারণা এবং বৈশিষ্ট্যগুলির মধ্যে অন্যতম।
Declarative Mapping
SQLAlchemy তে Declarative পদ্ধতি ব্যবহার করে মডেল এবং টেবিলের মধ্যে ম্যাপিং করা হয়। Declarative Base হলো একটি বিশেষ Base ক্লাস, যা Python ক্লাসগুলিকে ডেটাবেস টেবিলের সাথে যুক্ত করার কাজ করে।
Model এবং Table এর মধ্যে ম্যাপিং
- Base ক্লাস তৈরি করা
প্রথমে,declarative_base()ফাংশন ব্যবহার করে একটি Base ক্লাস তৈরি করতে হবে। এই Base ক্লাসের মাধ্যমে আমরা টেবিল তৈরি এবং ম্যাপিং করতে পারব। - মডেল তৈরি করা
এরপর, Python ক্লাস তৈরি করতে হবে, যা আমাদের ডেটাবেস টেবিলের জন্য মডেল হিসেবে কাজ করবে। - টেবিলের কলামগুলোর সাথে ক্লাসের অ্যাট্রিবিউট ম্যাপিং করা
Python ক্লাসের মধ্যে কলামগুলোর জন্যColumnব্যবহার করে ডেটাবেসের কলাম এবং তাদের ডেটা টাইপ নির্ধারণ করতে হবে।
মডেল ম্যাপিং করার উদাহরণ
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
# Declarative Base তৈরি
Base = declarative_base()
# মডেল তৈরি
class User(Base):
__tablename__ = 'users' # টেবিল নাম
# টেবিলের কলাম গুলি
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
# SQLite ডেটাবেসে সংযোগ তৈরি
engine = create_engine('sqlite:///example.db', echo=True)
# টেবিল তৈরি করা
Base.metadata.create_all(engine)
# সেশন তৈরি
Session = sessionmaker(bind=engine)
session = Session()
# নতুন ইউজার ইনসার্ট করা
new_user = User(name="Alice", age=30)
session.add(new_user)
session.commit()
# ডেটাবেস থেকে ডেটা রিড করা
users = session.query(User).all()
for user in users:
print(user.name, user.age)
# সেশন বন্ধ করা
session.close()
ব্যাখ্যা
- Declarative Base
এখানেBase = declarative_base()দিয়ে Base ক্লাস তৈরি করা হয়েছে। এই Base ক্লাসের মাধ্যমে সমস্ত ORM মডেল ডেটাবেস টেবিলের সাথে সম্পর্কিত হয়। - Python ক্লাস
Userনামক একটি Python ক্লাস তৈরি করা হয়েছে, যা users টেবিলের জন্য মডেল। ক্লাসের মধ্যেColumnএবং ডেটা টাইপ (যেমনInteger,String) দিয়ে টেবিলের কলাম গুলি নির্ধারণ করা হয়েছে। - টেবিল তৈরি
Base.metadata.create_all(engine)ব্যবহার করে SQLAlchemy ডেটাবেসে টেবিল তৈরি করা হয়েছে। এটিUserক্লাসের উপর ভিত্তি করে users নামক একটি টেবিল তৈরি করবে। - Session
sessionmakerব্যবহার করে ডেটাবেসে কার্যক্রম পরিচালনার জন্য একটি সেশন তৈরি করা হয়েছে, এবং সেশনটির মাধ্যমে ডেটা ইনসার্ট (insert) ও রিড (read) করা হয়েছে। - কমিট এবং রোলব্যাক
session.commit()দিয়ে ডেটাবেসে সেভ করা হয়েছে। ইনসার্ট বা আপডেট করার পর পরিবর্তনগুলি সেভ করতেcommit()প্রয়োজন।
মডেল ম্যাপিং এর কিছু গুরুত্বপূর্ন পয়েন্ট
- Primary Key: SQLAlchemy তে
primary_key=Trueদিয়ে একটি কলামকে প্রাথমিক কী হিসেবে চিহ্নিত করা হয়। - Foreign Key: SQLAlchemy তে অন্য টেবিলের সাথে সম্পর্ক তৈরি করতে Foreign Key ব্যবহার করা হয়।
- ডেটা টাইপ: SQLAlchemy ডেটাবেসের বিভিন্ন ডেটা টাইপ যেমন
Integer,String,Float,Dateইত্যাদি সমর্থন করে। - Constraints: কলামের জন্য constraint (যেমন
Unique,Check) নির্ধারণ করা যেতে পারে।
সারাংশ
SQLAlchemy তে ডেটাবেস টেবিলের সাথে Python ক্লাসের মাধ্যমে মডেল ম্যাপিং করা হয়। Declarative পদ্ধতি ব্যবহার করে আমরা ক্লাস এবং টেবিলের মধ্যে সম্পর্ক স্থাপন করি এবং Column ব্যবহার করে টেবিলের কলামগুলি Python ক্লাসের অ্যাট্রিবিউটের সাথে যুক্ত করি। SQLAlchemy ORM আমাদের এই ম্যাপিংয়ের মাধ্যমে অবজেক্ট-ওরিয়েন্টেড পদ্ধতিতে ডেটাবেস পরিচালনা করতে সহায়তা করে।
Read more