CherryPy হলো একটি পাইথন-ভিত্তিক ওয়েব ফ্রেমওয়ার্ক যা খুবই সহজেই ডাটাবেস ইন্টিগ্রেশন এবং মডেলিং পরিচালনা করতে সক্ষম। CherryPy নিজে কোনো ORM (Object-Relational Mapping) লাইব্রেরি সরবরাহ না করলেও, এটি অন্যান্য পাইথন ORM লাইব্রেরি যেমন SQLAlchemy, Peewee, বা Tortoise ORM এর সাথে সহজেই ইন্টিগ্রেট করা যায়। এই টিউটোরিয়ালে আমরা দেখব কিভাবে CherryPy তে ডাটাবেস মডেলিং এবং কুয়েরি ম্যানেজমেন্ট পরিচালনা করা যায়।
CherryPy তে ডাটাবেস মডেলিং
ডাটাবেস মডেলিংয়ে CherryPy কে সাধারণত SQLAlchemy বা অন্য কোন ORM লাইব্রেরি ব্যবহার করা হয়। SQLAlchemy একটি শক্তিশালী ORM যা ডাটাবেস মডেলিং এবং কুয়েরি ম্যানেজমেন্টের জন্য সহজ এবং কার্যকরী সমাধান প্রদান করে।
উদাহরণ: SQLAlchemy ব্যবহার করে ডাটাবেস মডেলিং
- SQLAlchemy ইনস্টল করা:
pip install sqlalchemy
- ডাটাবেস মডেল তৈরি করা:
এখানে আমরা একটি সাধারণ User মডেল তৈরি করব এবং SQLAlchemy এর মাধ্যমে ডাটাবেসে সংরক্ষণ করব।
import cherrypy
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
# ডাটাবেস কনফিগারেশন
DATABASE_URL = "sqlite:///example.db"
Base = declarative_base()
# User মডেল তৈরি
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
email = Column(String)
# ডাটাবেস সংযোগ স্থাপন
engine = create_engine(DATABASE_URL)
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
class UserApp:
@cherrypy.expose
def index(self):
return '''<html>
<body>
<h2>ব্যবহারকারী তৈরি করুন</h2>
<form method="post" action="/create_user">
<input type="text" name="name" placeholder="নাম" required><br>
<input type="email" name="email" placeholder="ইমেল" required><br>
<input type="submit" value="ব্যবহারকারী তৈরি করুন">
</form>
</body>
</html>'''
@cherrypy.expose
def create_user(self, name, email):
# নতুন ব্যবহারকারী ডাটাবেসে সংরক্ষণ
new_user = User(name=name, email=email)
session.add(new_user)
session.commit()
return f"ব্যবহারকারী '{name}' সফলভাবে তৈরি হয়েছে!"
if __name__ == '__main__':
cherrypy.quickstart(UserApp())
কোড ব্যাখ্যা:
- SQLAlchemy ব্যবহার করে ডাটাবেস সংযোগ করা হয়েছে এবং একটি
Userটেবিল তৈরি করা হয়েছে। UserAppক্লাসে একটি ফর্ম ব্যবহার করে ব্যবহারকারীর তথ্য ইনপুট নেওয়া হচ্ছে এবং ডাটাবেসে সংরক্ষণ করা হচ্ছে।- SQLite ডাটাবেস ব্যবহার করা হয়েছে, কিন্তু আপনি অন্য ডাটাবেস যেমন MySQL বা PostgreSQL ব্যবহার করতে পারেন।
ডাটাবেস কুয়েরি ম্যানেজমেন্ট
SQLAlchemy এর মাধ্যমে কুয়েরি পরিচালনা খুবই সহজ। আপনি session.query() ব্যবহার করে ডাটাবেসের তথ্য গ্রহণ, আপডেট, বা মুছে ফেলতে পারেন।
উদাহরণ: ডাটাবেস কুয়েরি পরিচালনা
- ব্যবহারকারীকে খুঁজে বের করা এবং আপডেট করা:
class UserApp:
@cherrypy.expose
def view_user(self, user_id):
# ব্যবহারকারী খুঁজে বের করা
user = session.query(User).filter(User.id == user_id).first()
if user:
return f"ব্যবহারকারী: {user.name}, ইমেল: {user.email}"
else:
return "ব্যবহারকারী পাওয়া যায়নি!"
@cherrypy.expose
def update_user(self, user_id, name, email):
# ব্যবহারকারী আপডেট করা
user = session.query(User).filter(User.id == user_id).first()
if user:
user.name = name
user.email = email
session.commit()
return f"ব্যবহারকারী '{name}' সফলভাবে আপডেট করা হয়েছে!"
else:
return "ব্যবহারকারী পাওয়া যায়নি!"
কোড ব্যাখ্যা:
view_userমেথডেsession.query()ব্যবহার করে নির্দিষ্ট ID এর ব্যবহারকারী খুঁজে বের করা হয়েছে এবং তার তথ্য প্রদর্শন করা হচ্ছে।update_userমেথডেsession.query()ব্যবহার করে ব্যবহারকারীর তথ্য আপডেট করা হচ্ছে।
ফিল্টার এবং কন্ডিশন ব্যবহার
SQLAlchemy তে বিভিন্ন ধরনের ফিল্টার এবং কন্ডিশন ব্যবহার করে কুয়েরি করা যায়।
উদাহরণ: ফিল্টার ব্যবহার করে কুয়েরি করা
class UserApp:
@cherrypy.expose
def search_users(self, name=None):
if name:
# নাম অনুযায়ী ব্যবহারকারীদের খুঁজে বের করা
users = session.query(User).filter(User.name.like(f"%{name}%")).all()
if users:
result = ""
for user in users:
result += f"ব্যবহারকারী: {user.name}, ইমেল: {user.email}<br>"
return result
else:
return "কোনো ব্যবহারকারী পাওয়া যায়নি!"
return "অনুগ্রহ করে নাম প্রদান করুন!"
কোড ব্যাখ্যা:
search_usersমেথডেlikeকন্ডিশন ব্যবহার করে নির্দিষ্ট নামের সাথে মেলে এমন ব্যবহারকারীদের খুঁজে বের করা হয়েছে।
ডাটাবেসের সাথে টানাপোড়েন পরিচালনা
CherryPy তে একাধিক HTTP রিকোয়েস্টে ডাটাবেসের সাথে কাজ করার সময় টানাপোড়েন (Concurrency) ঘটতে পারে। তাই CherryPy তে ডাটাবেসে একটি একক সেশনের পরিবর্তে সেশনের ব্যবস্থাপনা এবং এক্সেপশন হ্যান্ডলিং নিশ্চিত করা গুরুত্বপূর্ণ।
উদাহরণ: এক্সেপশন হ্যান্ডলিং
class UserApp:
@cherrypy.expose
def create_user(self, name, email):
try:
new_user = User(name=name, email=email)
session.add(new_user)
session.commit()
return f"ব্যবহারকারী '{name}' সফলভাবে তৈরি হয়েছে!"
except Exception as e:
session.rollback() # ট্রান্স্যাকশন রোলব্যাক করা
return f"ত্রুটি: {str(e)}"
কোড ব্যাখ্যা:
session.rollback()ব্যবহার করে কোনো ত্রুটি ঘটলে ডাটাবেসের ট্রান্স্যাকশন রোলব্যাক করা হয়েছে।
CherryPy তে ডাটাবেস মডেলিং এবং কুয়েরি ম্যানেজমেন্ট খুবই সহজ এবং শক্তিশালী। SQLAlchemy বা অন্য ORM লাইব্রেরি ব্যবহার করে আপনি CherryPy অ্যাপ্লিকেশনকে কার্যকরীভাবে ডাটাবেস ইন্টিগ্রেট করতে পারেন। এই মাধ্যমে আপনি ডাটাবেসে তথ্য সংরক্ষণ, আপডেট, ডিলিট এবং কুয়েরি পরিচালনা করতে পারবেন, যা আপনাকে একটি শক্তিশালী ওয়েব অ্যাপ্লিকেশন তৈরি করতে সহায়তা করবে।
Read more