ORM (Object Relational Mapping) একটি কৌশল, যা ডেটাবেস টেবিলগুলিকে অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) ভাষায় অবজেক্টের মাধ্যমে উপস্থাপন করে। SQLAlchemy ORM ডেটাবেস টেবিলগুলোকে Python ক্লাস হিসেবে রূপান্তর করে এবং ডেটাবেসে কাজ করার জন্য SQL লেখার প্রয়োজনীয়তা কমিয়ে আনে। ORM এর মাধ্যমে আপনি ডেটাবেস অপারেশনগুলোকে অবজেক্ট ম্যানিপুলেশন হিসাবে পরিচালনা করতে পারেন, যা কোডকে আরো পরিষ্কার এবং রিডেবল করে।
SQLAlchemy তে ORM ব্যবহারের জন্য কিছু মূল ধারণা এবং প্রক্রিয়া আছে, যেগুলি আপনাকে Create, Read, Update, এবং Delete (CRUD) অপারেশনগুলি করতে সহায়তা করবে।
ORM এর মূল ধারণা
SQLAlchemy ORM একটি Python ক্লাস এবং ডেটাবেস টেবিলের মধ্যে সম্পর্ক তৈরি করে। আপনি যখন ORM মডেল ব্যবহার করবেন, তখন SQLAlchemy Python ক্লাসের সাহায্যে ডেটাবেস টেবিলের রেকর্ড পরিচালনা করবে, এবং SQL কুয়েরি লেখার প্রয়োজন থাকবে না।
ORM এর প্রধান বৈশিষ্ট্যগুলো:
- টেবিলের সাথে অবজেক্ট ম্যাপিং: ORM আপনাকে Python অবজেক্টগুলোকে ডেটাবেস টেবিলের সাথে সম্পর্কিত করতে সহায়তা করে।
- ডেটাবেস স্টেটমেন্ট স্বয়ংক্রিয়ভাবে তৈরি করা: ORM অবজেক্ট থেকে ডেটাবেস কুয়েরি তৈরি এবং এক্সিকিউট করে।
- Relational Data Management: টেবিলের মধ্যে সম্পর্ক যেমন One-to-One, One-to-Many, Many-to-Many তৈরি এবং পরিচালনা করা সহজ।
- CRUD অপারেশন সহজতর: ORM এর মাধ্যমে ডেটা ইনসার্ট, আপডেট, মুছে ফেলা এবং পড়া খুব সহজ হয়ে যায়।
ORM এর সাথে কাজ শুরু করা
SQLAlchemy ORM ব্যবহারের জন্য, আপনাকে প্রথমে Session এবং Declarative Base ব্যবহার করতে হবে।
1. Declarative Base তৈরি করা
Declarative Base হল একটি ক্লাস যা SQLAlchemy ORM ব্যবহারের জন্য ডেটাবেস টেবিলের মডেল তৈরি করতে সাহায্য করে।
from sqlalchemy.ext.declarative import declarative_base
# Declarative Base তৈরি করা
Base = declarative_base()
2. মডেল তৈরি করা
ডেটাবেস টেবিলের জন্য Python ক্লাস তৈরি করা হয়। ক্লাসের ভিতরে টেবিলের কলামগুলো সংজ্ঞায়িত করা হয়।
from sqlalchemy import Column, Integer, String
# মডেল ডিফাইন করা
class User(Base):
__tablename__ = 'users' # টেবিল নাম
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
এখানে User ক্লাসটি users টেবিলের সাথে সম্পর্কিত। id, name, এবং age হলো টেবিলের কলাম।
Session এবং ডেটাবেসের সাথে সংযোগ
ডেটাবেসে CRUD অপারেশন করতে Session ব্যবহার করতে হয়, যা SQLAlchemy তে ডেটাবেসের সাথে কাজ করার জন্য ব্যবহৃত হয়।
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
# ডেটাবেসের জন্য ইঞ্জিন তৈরি করা
engine = create_engine('sqlite:///example.db', echo=True)
# Session তৈরি
Session = sessionmaker(bind=engine)
session = Session()
এখন আপনি session ব্যবহার করে ডেটাবেসে CRUD অপারেশন করতে পারবেন।
CRUD অপারেশন (Create, Read, Update, Delete)
1. Create (ডেটা ইনসার্ট করা)
# নতুন ইউজার তৈরি করা
new_user = User(name="John Doe", age=25)
session.add(new_user) # নতুন ইউজার সেশন দ্বারা ট্র্যাক করা হচ্ছে
session.commit() # ডেটাবেসে সেভ করা
এখানে, add() মেথড ব্যবহার করে new_user অবজেক্টটি সেশনে যুক্ত করা হয়েছে এবং commit() মেথডের মাধ্যমে ডেটাবেসে সেভ করা হয়েছে।
2. Read (ডেটা রিড করা)
# ডেটাবেস থেকে ইউজার রিড করা
users = session.query(User).filter_by(name="John Doe").all()
for user in users:
print(user.name, user.age)
এখানে, query() মেথড ব্যবহার করে User টেবিলের সব রেকর্ড রিড করা হচ্ছে। filter_by() দিয়ে নির্দিষ্ট মান অনুসারে ডেটা ফিল্টার করা হয়েছে।
3. Update (ডেটা আপডেট করা)
# ইউজারের বয়স আপডেট করা
user_to_update = session.query(User).filter_by(name="John Doe").first()
user_to_update.age = 26
session.commit() # পরিবর্তন ডেটাবেসে সেভ
এখানে, প্রথমে filter_by() দিয়ে John Doe নামক ইউজারটি খুঁজে বের করা হয়েছে, তারপর তার বয়স আপডেট করা হয়েছে।
4. Delete (ডেটা মুছে ফেলা)
# ইউজার মুছে ফেলা
user_to_delete = session.query(User).filter_by(name="John Doe").first()
session.delete(user_to_delete) # ডেটাবেস থেকে মুছে ফেলা
session.commit() # পরিবর্তন সেভ করা
এখানে, delete() মেথড ব্যবহার করে John Doe নামক ইউজারটিকে ডেটাবেস থেকে মুছে ফেলা হয়েছে।
ORM এর মধ্যে সম্পর্ক তৈরি (Relationships)
SQLAlchemy ORM বিভিন্ন ধরনের সম্পর্ক (relationship) তৈরি করার জন্য সহায়তা প্রদান করে:
- One-to-One Relationship: এক টেবিলের এক রেকর্ড অন্য টেবিলের এক রেকর্ডের সাথে সম্পর্কিত।
- One-to-Many Relationship: এক টেবিলের এক রেকর্ড অন্য টেবিলের একাধিক রেকর্ডের সাথে সম্পর্কিত।
- Many-to-Many Relationship: একাধিক রেকর্ড একাধিক রেকর্ডের সাথে সম্পর্কিত।
উদাহরণ:
from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationship
# Parent টেবিল
class Parent(Base):
__tablename__ = 'parents'
id = Column(Integer, primary_key=True)
name = Column(String)
# One-to-many relationship
children = relationship("Child", back_populates="parent")
# Child টেবিল
class Child(Base):
__tablename__ = 'children'
id = Column(Integer, primary_key=True)
name = Column(String)
parent_id = Column(Integer, ForeignKey('parents.id'))
# Back reference to Parent
parent = relationship("Parent", back_populates="children")
এখানে Parent এবং Child টেবিলের মধ্যে One-to-Many Relationship তৈরি করা হয়েছে।
Lazy Loading এবং Eager Loading
- Lazy Loading: সম্পর্কিত ডেটা তখনই লোড হয় যখন প্রয়োজন হয়।
- Eager Loading: সম্পর্কিত ডেটা একবারে লোড হয়, যখন মূল ডেটা লোড হয়।
উদাহরণ:
# Lazy loading example
parent = session.query(Parent).first()
print(parent.children) # Children will be loaded only when accessed
সারাংশ
SQLAlchemy ORM ডেটাবেস টেবিলগুলোকে Python অবজেক্টের সাথে সম্পর্কিত করে এবং ডেটাবেসের সাথে অবজেক্ট-ওরিয়েন্টেড পদ্ধতিতে কাজ করার সুবিধা দেয়। এটি CRUD অপারেশন সহজ করে তোলে এবং ডেটাবেসের মধ্যে সম্পর্ক (One-to-One, One-to-Many, Many-to-Many) তৈরি এবং পরিচালনা করার জন্য শক্তিশালী ফিচার প্রদান করে। ORM এর মাধ্যমে SQLAlchemy কোড লেখাকে আরও সহজ, পরিষ্কার এবং রিডেবল করে তোলে।
ORM (Object Relational Mapping) একটি পদ্ধতি যা ডেটাবেস এবং প্রোগ্রামিং ভাষার মধ্যে সম্পর্ক স্থাপন করে। এটি ডেটাবেস টেবিলগুলিকে প্রোগ্রামিং ভাষার ক্লাসের সাথে মানচিত্রিত (map) করে এবং ডেটাবেসের রেকর্ডগুলিকে অবজেক্ট হিসেবে কাজ করতে সক্ষম করে। অর্থাৎ, ORM ডেটাবেসের কাজগুলোকে অবজেক্ট-ওরিয়েন্টেড পদ্ধতিতে রূপান্তর করে, যাতে ডেটাবেসের সাথে কাজ করার সময় প্রোগ্রামারকে SQL স্টেটমেন্ট লিখতে না হয় এবং সরাসরি Python কোডের মাধ্যমে ডেটা পরিচালনা করা যায়।
SQLAlchemy ORM ব্যবহার করে, আপনি ডেটাবেসের টেবিলগুলোকে Python ক্লাসের মধ্যে রূপান্তর করতে পারেন এবং সেই ক্লাসের অবজেক্টের মাধ্যমে ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করতে পারেন।
ORM এর মূল বৈশিষ্ট্য
- ডেটাবেস টেবিলের অবজেক্ট হিসেবে উপস্থাপন:
ORM ডেটাবেস টেবিলগুলোকে Python ক্লাসের মাধ্যমে উপস্থাপন করে। প্রতিটি কলাম একটি অ্যাট্রিবিউট হিসেবে কাজ করে এবং এই অবজেক্টের মাধ্যমে ডেটাবেসের রেকর্ডের সাথে কাজ করা যায়। - CRUD অপারেশন:
ORM ব্যবহার করে আপনি ডেটাবেসে Create, Read, Update, এবং Delete (CRUD) অপারেশন করতে পারেন। এগুলো সব Python কোডের মাধ্যমে করা যায়, কোনো SQL লেখার প্রয়োজন হয় না। - SQL কোয়েরি না লেখার সুবিধা:
ORM আপনাকে সরাসরি SQL স্টেটমেন্ট লেখার থেকে মুক্তি দেয়। ডেটাবেস টেবিল এবং কলামের সাথে কাজ করতে Python অবজেক্ট ব্যবহার করে, যা কোডকে আরও পরিষ্কার এবং রিডেবল করে তোলে। - ডেটাবেস স্বাধীনতা:
ORM ব্যবহার করে ডেটাবেসের জন্য একক কোড বেস তৈরি করা যায়, যা একাধিক ডেটাবেস ইঞ্জিনের সাথে কাজ করতে সক্ষম। অর্থাৎ, আপনি একটি ডেটাবেস থেকে অন্য ডেটাবেসে পরিবর্তন করলেও ORM কোডে খুব বেশি পরিবর্তন করতে হয় না। - Relationship Handling:
ORM ডেটাবেসের টেবিলগুলির মধ্যে সম্পর্ক পরিচালনা করতে সাহায্য করে। যেমন, One-to-One, One-to-Many, এবং Many-to-Many সম্পর্ক সহজে তৈরি এবং পরিচালনা করা যায়।
ORM কেন ব্যবহার করা হয়?
- SQL এর জন্য সরাসরি কোড না লিখে কাজ করা:
ORM ব্যবহারের প্রধান সুবিধা হলো ডেটাবেসের সাথে কাজ করতে SQL স্টেটমেন্ট লিখতে হয় না। ORM Python ক্লাসের মাধ্যমে এই কাজটি সহজ করে দেয়, যা কোডিংয়ের ক্ষেত্রে সহজতা এনে দেয়। - ডেটাবেস মডেলিং:
ORM ডেটাবেসের কাঠামো বা মডেলিং প্রক্রিয়া সহজ করে তোলে। টেবিলের স্ট্রাকচার, কলাম, কনস্ট্রেইন্ট ইত্যাদি সব কিছু Python কোডের মধ্যে সংজ্ঞায়িত করা যায়। - পারফরম্যান্স অপটিমাইজেশন:
ORM ব্যবহার করে ডেটাবেস থেকে তথ্য লোড করা এবং প্রাসঙ্গিক ডেটা ফেচিং (lazy/eager loading) সহজে করা যায়। এছাড়া, ORM একাধিক অবজেক্টে একযোগে অপারেশন করতে সক্ষম। - ট্রানজেকশন ম্যানেজমেন্ট:
ORM ডেটাবেস ট্রানজেকশন পরিচালনা সহজ করে। এটি ডেটাবেসের মধ্যে পরিবর্তন সঠিকভাবে কমিট বা রোলব্যাক করার ব্যবস্থা সরবরাহ করে। - ডেভেলপমেন্টের গতির উন্নতি:
ORM ডেটাবেস ম্যানিপুলেশন দ্রুত এবং সহজতর করে, যার ফলে ডেভেলপারদের জন্য কাজের গতি বাড়ে। SQL কিউরি লেখার পরিবর্তে অবজেক্ট মডেল ব্যবহার করা ডেভেলপমেন্ট সময় কমাতে সাহায্য করে। - সিকিউরিটি:
ORM SQL ইনজেকশন প্রতিরোধে সাহায্য করে, কারণ ORM নিজে SQL কোড তৈরির সময় ইস্যু হওয়া নিরাপত্তা সমস্যাগুলোর প্রতি সতর্ক থাকে। এটি ডেটা ইনসার্ট, আপডেট ইত্যাদি অপারেশনগুলোকে নিরাপদভাবে পরিচালনা করতে পারে।
ORM এর উদাহরণ (SQLAlchemy ORM)
ধরা যাক, আমাদের একটি User টেবিল আছে, যেখানে id, name, এবং age কলাম রয়েছে। নিচে ORM ব্যবহার করে এটি কিভাবে মডেল করা যায়:
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
# Base ক্লাস তৈরি
Base = declarative_base()
# User ক্লাস তৈরি, যা টেবিলের মতো কাজ করবে
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
# ইঞ্জিন তৈরি
engine = create_engine('sqlite:///example.db')
# টেবিল তৈরি করা
Base.metadata.create_all(engine)
# সেশন তৈরি
Session = sessionmaker(bind=engine)
session = Session()
# নতুন ইউজার ইনসার্ট করা
new_user = User(name="John", age=25)
session.add(new_user)
session.commit()
# ইউজার রিড করা
users = session.query(User).all()
for user in users:
print(user.name, user.age)
# সেশন বন্ধ করা
session.close()
এই কোডে:
Userক্লাসটি ডেটাবেসেরusersটেবিলের সাথে সম্পর্কিত।- SQLAlchemy ORM ব্যবহার করে অবজেক্ট তৈরি, সেভ, এবং ডেটাবেস থেকে রিড করা হয়েছে।
sessionঅবজেক্ট ব্যবহার করে CRUD অপারেশন সম্পন্ন করা হয়েছে।
সারাংশ
ORM (Object Relational Mapping) একটি গুরুত্বপূর্ণ কৌশল যা ডেটাবেস এবং প্রোগ্রামিং ভাষার মধ্যে সম্পর্ক স্থাপন করে। এটি SQLAlchemy এর মাধ্যমে ডেটাবেস ম্যানিপুলেশনকে সরল করে, এবং প্রোগ্রামারদের SQL স্টেটমেন্ট না লিখে অবজেক্ট-ওরিয়েন্টেড পদ্ধতিতে কাজ করার সুযোগ দেয়। ORM ব্যবহারের মাধ্যমে ডেটাবেস পরিচালনা সহজ, দ্রুত, নিরাপদ এবং স্কেলেবল হয়।
SQLAlchemy ORM (Object Relational Mapping) এর মাধ্যমে Python ক্লাস এবং ডেটাবেস টেবিলের মধ্যে সম্পর্ক তৈরি করা হয়। ORM ব্যবহার করে ডেটাবেস টেবিলগুলোকে Python ক্লাসের মাধ্যমে মডেল করা হয়, যার ফলে SQLAlchemy ডেটাবেসের সাথে অবজেক্ট-ওরিয়েন্টেড পদ্ধতিতে যোগাযোগ করতে পারে। SQLAlchemy ORM এর মাধ্যমে ডেটাবেস টেবিলের কাঠামো এবং তাদের মধ্যে সম্পর্ক খুব সহজে মডেল করা যায়।
ORM মডেল তৈরি করার প্রক্রিয়া
SQLAlchemy ORM দিয়ে মডেল তৈরি করতে Declarative Base ব্যবহার করতে হয়, যেটি SQLAlchemy ORM এর মূল অংশ। মডেল তৈরি করার জন্য Base ক্লাসের সাথে Python ক্লাসগুলোকে সংযুক্ত করা হয়, যা ডেটাবেস টেবিলের প্রতিনিধিত্ব করে।
1. Declarative Base তৈরি করা
প্রথমে, Declarative Base তৈরি করতে হয়। এটি একটি শ্রেণি (class) যা SQLAlchemy ORM এর মাধ্যমে ডেটাবেস টেবিলের জন্য অবজেক্ট মডেল তৈরি করে।
from sqlalchemy.ext.declarative import declarative_base
# Base ক্লাস তৈরি
Base = declarative_base()
2. মডেল (Model) তৈরি করা
SQLAlchemy ORM ব্যবহার করে একটি Python ক্লাস তৈরি করা হয়, যা একটি ডেটাবেস টেবিলের প্রতিনিধিত্ব করে। ক্লাসের প্রতিটি অ্যাট্রিবিউট (attribute) একটি টেবিলের কলাম হিসেবে রূপান্তরিত হয়।
from sqlalchemy import Column, Integer, String
# User মডেল তৈরি
class User(Base):
__tablename__ = 'users' # ডেটাবেস টেবিলের নাম
id = Column(Integer, primary_key=True) # প্রাথমিক কী (Primary Key)
name = Column(String) # নামের কলাম
age = Column(Integer) # বয়সের কলাম
এখানে, User ক্লাস users নামক ডেটাবেস টেবিলের জন্য একটি ORM মডেল। id, name, এবং age হল এই টেবিলের কলামসমূহ। id কলামটি primary_key=True দ্বারা প্রাথমিক কী হিসেবে চিহ্নিত করা হয়েছে।
3. ডেটাবেসে টেবিল তৈরি করা
একবার মডেল তৈরি হয়ে গেলে, আপনাকে ডেটাবেসে টেবিলটি তৈরি করতে হবে। এজন্য Base.metadata.create_all() মেথড ব্যবহার করা হয়।
from sqlalchemy import create_engine
# SQLite ডেটাবেসের জন্য ইঞ্জিন তৈরি
engine = create_engine('sqlite:///example.db', echo=True)
# টেবিল তৈরি
Base.metadata.create_all(engine)
এখানে, create_all() মেথডটি Base এর সমস্ত মডেল টেবিলগুলো ডেটাবেসে তৈরি করবে। এই উদাহরণে, example.db নামে SQLite ডেটাবেস ফাইল তৈরি হবে এবং users টেবিল এতে তৈরি হবে।
4. Session এর মাধ্যমে ডেটাবেসে ডেটা ইনসার্ট করা
একবার মডেল এবং টেবিল তৈরি হলে, SQLAlchemy ORM এর মাধ্যমে ডেটাবেসে ডেটা ইনসার্ট করতে Session ব্যবহার করা হয়।
from sqlalchemy.orm import sessionmaker
# Session তৈরি
Session = sessionmaker(bind=engine)
session = Session()
# নতুন ইউজার তৈরি
new_user = User(name="John Doe", age=28)
# ডেটাবেসে সেভ করা
session.add(new_user)
session.commit() # ডেটাবেসে পরিবর্তন সেভ করা
# সেশন বন্ধ করা
session.close()
এখানে, session.add() ব্যবহার করে নতুন ইউজার অবজেক্ট new_user ডেটাবেসে সেভ করা হয়েছে এবং session.commit() ব্যবহার করে সেই পরিবর্তন ডেটাবেসে সংরক্ষিত হয়েছে।
5. ডেটাবেস থেকে ডেটা রিড করা
SQLAlchemy ORM ব্যবহার করে ডেটাবেস থেকে ডেটা রিড করার জন্য query() মেথড ব্যবহার করা হয়।
# ডেটাবেস থেকে ইউজার রিড করা
users = session.query(User).all() # সব ইউজার রিড করা
for user in users:
print(user.name, user.age)
এখানে, session.query(User).all() ব্যবহার করে User মডেলের সব রেকর্ড রিড করা হয়েছে এবং প্রতিটি ইউজারের নাম ও বয়স প্রিন্ট করা হয়েছে।
SQLAlchemy ORM এর সম্পর্কিত কিছু গুরুত্বপূর্ণ বিষয়
- Primary Key: এটি টেবিলের একটি বিশেষ কলাম যা ইউনিক ভ্যালু ধারণ করে এবং প্রতিটি রেকর্ডের জন্য স্বতন্ত্রভাবে কাজ করে।
- Foreign Key: এটি দুটি টেবিলের মধ্যে সম্পর্ক স্থাপন করে। একটি টেবিলের কলাম অন্য টেবিলের প্রাথমিক কীকে রেফারেন্স করে।
- Relationships: SQLAlchemy ORM এর মাধ্যমে One-to-One, One-to-Many, এবং Many-to-Many সম্পর্ক তৈরি করা যায়।
- Declarative Base: এটি SQLAlchemy ORM মডেলিং এর জন্য ব্যবহৃত একটি উচ্চ স্তরের API।
সারাংশ
SQLAlchemy ORM ব্যবহার করে ডেটাবেস টেবিলের জন্য Python ক্লাস তৈরি করা হয়, যা একটি অবজেক্ট-ওরিয়েন্টেড পদ্ধতিতে ডেটাবেস অপারেশন সম্পন্ন করতে সহায়ক। Base এবং Session ব্যবহার করে টেবিল তৈরি, ডেটা ইনসার্ট, রিড, আপডেট এবং ডিলিট করা যায়। SQLAlchemy ORM এর মাধ্যমে ডেটাবেস পরিচালনা করা সহজ এবং কার্যকরী হয়, যা ডেভেলপারদের সময় বাঁচাতে সাহায্য করে।
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 আমাদের এই ম্যাপিংয়ের মাধ্যমে অবজেক্ট-ওরিয়েন্টেড পদ্ধতিতে ডেটাবেস পরিচালনা করতে সহায়তা করে।
SQLAlchemy তে Data Manipulation বা CRUD (Create, Read, Update, Delete) অপারেশন অত্যন্ত গুরুত্বপূর্ণ। ORM (Object Relational Mapping) ব্যবহারের মাধ্যমে, SQLAlchemy আপনাকে ডেটাবেসে এই অপারেশনগুলো সহজে পরিচালনা করতে সাহায্য করে, যেখানে Python কোডের মাধ্যমে ডেটাবেস টেবিলের রেকর্ড ম্যানিপুলেট করা যায়।
এখানে Create, Read, Update, এবং Delete অপারেশন SQLAlchemy ORM এর মাধ্যমে কিভাবে করা যায়, তা নিয়ে বিস্তারিত আলোচনা করা হলো।
Create (ডেটা তৈরি করা)
SQLAlchemy তে ডেটা তৈরি করতে হলে প্রথমে একটি Model অবজেক্ট তৈরি করতে হয় এবং সেই অবজেক্টটি সেশন এর মাধ্যমে ডেটাবেসে সেভ করা হয়।
উদাহরণ:
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
# Declarative Base তৈরি
Base = declarative_base()
# User মডেল তৈরি
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)
# Session তৈরি
Session = sessionmaker(bind=engine)
session = Session()
# নতুন ইউজার তৈরি
new_user = User(name="Alice", age=30)
# সেশন দিয়ে ডেটাবেসে ইনসার্ট করা
session.add(new_user)
session.commit() # পরিবর্তন ডেটাবেসে সেভ
# সেশন বন্ধ করা
session.close()
এখানে, একটি নতুন User অবজেক্ট তৈরি করা হয়েছে এবং সেশন ব্যবহার করে add() মেথডের মাধ্যমে এটি ডেটাবেসে ইনসার্ট করা হয়েছে। commit() মেথডের মাধ্যমে পরিবর্তন ডেটাবেসে সেভ করা হয়েছে।
Read (ডেটা পড়া)
SQLAlchemy তে ডেটাবেস থেকে ডেটা রিড (পড়া) করার জন্য query() মেথড ব্যবহার করা হয়। এটি ORM মডেলের সাথে কাজ করে ডেটাবেস থেকে রেকর্ড ফেচ (fetch) করে।
উদাহরণ:
# Session তৈরি
session = Session()
# সব ইউজার রিড করা
users = session.query(User).all()
# রেকর্ড প্রিন্ট করা
for user in users:
print(user.name, user.age)
# সেশন বন্ধ করা
session.close()
এখানে, session.query(User).all() ব্যবহার করে users টেবিলের সমস্ত রেকর্ড ফেচ করা হয়েছে এবং তারপর for লুপের মাধ্যমে ডেটা প্রিন্ট করা হয়েছে।
Update (ডেটা আপডেট করা)
SQLAlchemy তে ডেটা আপডেট করতে হলে প্রথমে সংশ্লিষ্ট রেকর্ডকে খুঁজে বের করতে হয় এবং তারপর সেই রেকর্ডে নতুন মান অ্যাসাইন করে commit() মেথডের মাধ্যমে ডেটাবেসে পরিবর্তন সেভ করতে হয়।
উদাহরণ:
# Session তৈরি
session = Session()
# ইউজার খোঁজা (id=1)
user = session.query(User).filter_by(id=1).first()
# ইউজারের নাম পরিবর্তন করা
if user:
user.name = "Bob"
session.commit() # পরিবর্তন ডেটাবেসে সেভ
# সেশন বন্ধ করা
session.close()
এখানে, session.query(User).filter_by(id=1).first() এর মাধ্যমে id=1 ইউজার খুঁজে বের করা হয়েছে এবং তারপর তার name পরিবর্তন করে session.commit() মেথডের মাধ্যমে সেভ করা হয়েছে।
Delete (ডেটা মুছে ফেলা)
SQLAlchemy তে ডেটা মুছে ফেলার জন্য, প্রথমে সংশ্লিষ্ট রেকর্ডকে খুঁজে বের করতে হয় এবং তারপর delete() মেথড ব্যবহার করে সেশন থেকে মুছে ফেলতে হয়।
উদাহরণ:
# Session তৈরি
session = Session()
# ইউজার খোঁজা (id=1)
user = session.query(User).filter_by(id=1).first()
# ইউজার মুছে ফেলা
if user:
session.delete(user) # ডিলিট করা
session.commit() # পরিবর্তন ডেটাবেসে সেভ
# সেশন বন্ধ করা
session.close()
এখানে, session.query(User).filter_by(id=1).first() এর মাধ্যমে id=1 ইউজার খুঁজে বের করা হয়েছে এবং তারপর session.delete(user) ব্যবহার করে সেই ইউজার মুছে ফেলা হয়েছে। session.commit() এর মাধ্যমে পরিবর্তন ডেটাবেসে সেভ করা হয়েছে।
সারাংশ
SQLAlchemy তে CRUD (Create, Read, Update, Delete) অপারেশনগুলো খুবই সহজ এবং কার্যকরভাবে করা যায়। Create অপারেশন একটি নতুন অবজেক্ট তৈরি করে এবং তা ডেটাবেসে সেভ করে, Read অপারেশন ডেটাবেস থেকে ডেটা ফেচ করে, Update অপারেশন কোনো রেকর্ডের মান পরিবর্তন করে এবং Delete অপারেশন একটি রেকর্ড মুছে ফেলে। SQLAlchemy ORM এই সকল অপারেশনকে Python কোডের মাধ্যমে সহজ করে তোলে, যা ডেটাবেস ব্যবস্থাপনার কাজকে অনেক দ্রুত এবং কার্যকর করে।
Read more