CherryPy একটি লাইটওয়েট ওয়েব ফ্রেমওয়ার্ক, যা আপনার ওয়েব অ্যাপ্লিকেশনে সহজেই ডেটাবেস ইন্টিগ্রেশন এবং ORM (Object-Relational Mapping) ব্যবহার করতে সাহায্য করে। ডেটাবেস সংযোগের জন্য CherryPy স্বয়ংক্রিয়ভাবে কোনো নির্দিষ্ট ডেটাবেস প্রযুক্তি ব্যবহার করে না, তবে এটি পাইথন ডেটাবেস লাইব্রেরি বা ORM লাইব্রেরি যেমন SQLAlchemy, Peewee, অথবা Django ORM ব্যবহার করতে সক্ষম।
এই গাইডে আমরা দেখব কিভাবে CherryPy-তে ডেটাবেস ইন্টিগ্রেশন করা যায় এবং ORM ব্যবহার করে ডেটাবেস মডেল তৈরি করা যায়।
CherryPy-তে Database Integration
ডেটাবেস ইন্টিগ্রেশনের জন্য আপনাকে প্রথমে একটি ডেটাবেস লাইব্রেরি ইনস্টল করতে হবে, যেমন SQLite, MySQL, PostgreSQL অথবা MongoDB। এখানে আমরা SQLite এবং SQLAlchemy ব্যবহার করে CherryPy অ্যাপ্লিকেশনে ডেটাবেস সংযোগের উদাহরণ দেখব।
Step 1: ডেটাবেস লাইব্রেরি ইনস্টল করা
pip install sqlalchemy
এছাড়া, যদি আপনি SQLite ব্যবহার করতে চান, তা Python এর স্ট্যান্ডার্ড লাইব্রেরির অংশ, তাই আলাদা করে কোনো ইনস্টলেশন প্রয়োজন নেই।
SQLAlchemy ORM ব্যবহার করে Database Integration
SQLAlchemy একটি শক্তিশালী ORM টুল যা ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করার জন্য Python কোডের মাধ্যমে SQL ডাটাবেস ম্যানিপুলেশন সহজ করে তোলে।
Step 2: SQLAlchemy সেটআপ করা
এখানে আমরা SQLite ডেটাবেস এবং SQLAlchemy ORM ব্যবহার করব।
উদাহরণ: SQLite ডেটাবেসের সাথে CherryPy এবং SQLAlchemy ইন্টিগ্রেশন
import cherrypy
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
# SQLAlchemy এর বেস ক্লাস এবং ডেটাবেস ইঞ্জিন তৈরি
Base = declarative_base()
engine = create_engine('sqlite:///test.db', echo=True)
Session = sessionmaker(bind=engine)
# ডেটাবেস মডেল
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
email = Column(String)
# মডেলটি ডেটাবেসে তৈরি করা
Base.metadata.create_all(engine)
class DatabaseApp:
@cherrypy.expose
def index(self):
return '''
<form method="post" action="/add_user">
<label for="name">নাম:</label>
<input type="text" name="name" /><br>
<label for="email">ইমেইল:</label>
<input type="text" name="email" /><br>
<input type="submit" value="যোগ করুন" />
</form>
'''
@cherrypy.expose
def add_user(self, name, email):
# নতুন ব্যবহারকারী ডেটাবেসে যোগ করা
session = Session()
new_user = User(name=name, email=email)
session.add(new_user)
session.commit()
session.close()
return f"ব্যবহারকারী {name} সফলভাবে যোগ করা হয়েছে।"
if __name__ == '__main__':
cherrypy.quickstart(DatabaseApp())
কোড ব্যাখ্যা:
- SQLAlchemy Setup:
create_engineদিয়ে ডেটাবেসের সাথে সংযোগ তৈরি করা হয়। এখানে SQLite ব্যবহার করা হয়েছে।Base.metadata.create_all(engine)দিয়ে ডেটাবেসে টেবিল তৈরি করা হয়।
- ডেটাবেস মডেল:
- User ক্লাসটি SQLAlchemy ORM মডেল যা
usersটেবিলের প্রতিনিধিত্ব করে। এতেid,name, এবংemailকলাম রয়েছে।
- User ক্লাসটি SQLAlchemy ORM মডেল যা
- Form Handling:
indexমেথডটি একটি ফর্ম রেন্ডার করে যা ব্যবহারকারীর নাম এবং ইমেইল গ্রহণ করে।add_userমেথডটি ফর্ম ডেটা গ্রহণ করে, একটি নতুনUserঅবজেক্ট তৈরি করে এবং ডেটাবেসে সংরক্ষণ করে।
ORM এবং Database Querying
SQLAlchemy ORM ব্যবহার করে, আপনি ডেটাবেসে কাস্টম কোয়েরি চালাতে পারেন। উদাহরণস্বরূপ, একটি নির্দিষ্ট ব্যবহারকারী খুঁজে বের করতে SQLAlchemy এর ফিচার ব্যবহার করা যেতে পারে।
উদাহরণ: ডেটাবেস থেকে ব্যবহারকারী অনুসন্ধান
class DatabaseApp:
@cherrypy.expose
def get_user(self, user_id):
session = Session()
user = session.query(User).filter(User.id == user_id).first()
session.close()
if user:
return f"ব্যবহারকারী: {user.name}, ইমেইল: {user.email}"
else:
return "ব্যবহারকারী পাওয়া যায়নি।"
এখানে, get_user মেথডটি ডেটাবেস থেকে নির্দিষ্ট user_id এর ব্যবহারকারী খুঁজে বের করে রেসপন্স হিসেবে প্রদর্শন করবে।
Advanced ORM Functionalities
SQLAlchemy ORM এর কিছু আরও শক্তিশালী ফিচার রয়েছে, যেমন:
- Relational Mapping: সম্পর্কিত টেবিলগুলোর মধ্যে সম্পর্ক তৈরি করা (One-to-Many, Many-to-Many)।
- Query Filters: জটিল কোয়েরি তৈরি এবং ফিল্টারিং করা।
- Lazy Loading: সম্পর্কিত ডেটা অলসভাবে লোড করা।
যেমন:
class Post(Base):
__tablename__ = 'posts'
id = Column(Integer, primary_key=True)
title = Column(String)
content = Column(String)
user_id = Column(Integer, ForeignKey('users.id'))
user = relationship("User", backref="posts")
# Query to get all posts for a user
user = session.query(User).filter(User.id == 1).first()
posts = user.posts # This will load all posts related to the user
CherryPy তে Database Integration এবং ORM ব্যবহারের মাধ্যমে আপনি সহজেই ডেটাবেস পরিচালনা করতে পারেন। SQLAlchemy একটি শক্তিশালী ORM লাইব্রেরি যা ডেটাবেস ম্যানিপুলেশনকে সহজ করে তোলে। CherryPy এর সাথে এটি একত্রে ব্যবহার করে আপনি ডেটাবেসের সাথে সরাসরি ইন্টারঅ্যাক্ট করতে পারবেন এবং ওয়েব অ্যাপ্লিকেশনগুলির কার্যকারিতা এবং স্কেলেবিলিটি বৃদ্ধি করতে পারবেন।
CherryPy একটি হালকা ওয়েব ফ্রেমওয়ার্ক, যা বিভিন্ন ডাটাবেস সিস্টেমের সাথে কাজ করতে সক্ষম। আপনি CherryPy অ্যাপ্লিকেশন তৈরি করার সময় SQLite, MySQL, অথবা PostgreSQL এর মতো ডাটাবেস ব্যবহারের মাধ্যমে ডাইনামিক এবং পলিসি-ভিত্তিক ডেটা ম্যানেজমেন্ট সিস্টেম তৈরি করতে পারেন। এই টিউটোরিয়ালে আমরা CherryPy এর সাথে SQLite, MySQL এবং PostgreSQL ডাটাবেস সংযোগের পদ্ধতি দেখব।
১. SQLite ডাটাবেস সংযোগ
SQLite হলো একটি লাইটওয়েট ডাটাবেস সিস্টেম, যা ছোট এবং সহজ প্রকল্পগুলির জন্য আদর্শ। এটি ফাইল-ভিত্তিক ডাটাবেস, অর্থাৎ ডাটাবেসের ডেটা একটি .db ফাইলে সংরক্ষিত হয়।
SQLite সংযোগের উদাহরণ
স্টেপ ১: Python এর sqlite3 লাইব্রেরি ব্যবহার করে ডাটাবেস সংযোগ করুন।
import cherrypy
import sqlite3
class MyApp:
@cherrypy.expose
def index(self):
return "SQLite ডাটাবেস সংযোগ উদাহরণ"
@cherrypy.expose
def fetch_data(self):
# SQLite ডাটাবেস সংযোগ
conn = sqlite3.connect('mydatabase.db')
cursor = conn.cursor()
# ডাটাবেস থেকে ডেটা ফেচ করা
cursor.execute("SELECT * FROM users")
data = cursor.fetchall()
conn.close()
return str(data)
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে, mydatabase.db হলো SQLite ডাটাবেস ফাইল এবং users টেবিলের সব ডেটা ফেচ করা হচ্ছে।
২. MySQL ডাটাবেস সংযোগ
MySQL একটি শক্তিশালী রিলেশনাল ডাটাবেস ম্যানেজমেন্ট সিস্টেম, যা বড় অ্যাপ্লিকেশন এবং ওয়েব সাইটগুলির জন্য উপযুক্ত। Python-এ MySQL ব্যবহার করতে হলে mysql-connector-python বা PyMySQL লাইব্রেরি ব্যবহার করা হয়।
MySQL সংযোগের উদাহরণ
স্টেপ ১: প্রথমে mysql-connector-python ইনস্টল করুন।
pip install mysql-connector-python
স্টেপ ২: CherryPy অ্যাপ্লিকেশন দিয়ে MySQL ডাটাবেস সংযোগ।
import cherrypy
import mysql.connector
class MyApp:
@cherrypy.expose
def index(self):
return "MySQL ডাটাবেস সংযোগ উদাহরণ"
@cherrypy.expose
def fetch_data(self):
# MySQL ডাটাবেস সংযোগ
conn = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="yourdatabase"
)
cursor = conn.cursor()
# ডাটাবেস থেকে ডেটা ফেচ করা
cursor.execute("SELECT * FROM users")
data = cursor.fetchall()
conn.close()
return str(data)
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে, localhost হল MySQL সার্ভারের হোস্ট এবং yourdatabase আপনার ডাটাবেসের নাম। users টেবিলের ডেটা ফেচ করা হচ্ছে।
৩. PostgreSQL ডাটাবেস সংযোগ
PostgreSQL একটি ওপেন সোর্স রিলেশনাল ডাটাবেস সিস্টেম, যা বড় পরিসরের ডেটাবেস অ্যাপ্লিকেশনগুলির জন্য উপযুক্ত। PostgreSQL এর সাথে সংযোগ করতে Python-এ psycopg2 লাইব্রেরি ব্যবহার করা হয়।
PostgreSQL সংযোগের উদাহরণ
স্টেপ ১: প্রথমে psycopg2 ইনস্টল করুন।
pip install psycopg2
স্টেপ ২: CherryPy অ্যাপ্লিকেশন দিয়ে PostgreSQL ডাটাবেস সংযোগ।
import cherrypy
import psycopg2
class MyApp:
@cherrypy.expose
def index(self):
return "PostgreSQL ডাটাবেস সংযোগ উদাহরণ"
@cherrypy.expose
def fetch_data(self):
# PostgreSQL ডাটাবেস সংযোগ
conn = psycopg2.connect(
host="localhost",
dbname="yourdatabase",
user="yourusername",
password="yourpassword"
)
cursor = conn.cursor()
# ডাটাবেস থেকে ডেটা ফেচ করা
cursor.execute("SELECT * FROM users")
data = cursor.fetchall()
conn.close()
return str(data)
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে, localhost হল PostgreSQL সার্ভারের হোস্ট এবং yourdatabase আপনার ডাটাবেসের নাম। users টেবিলের ডেটা ফেচ করা হচ্ছে।
ডাটাবেসে টেবিল তৈরি করা (SQLite, MySQL, PostgreSQL)
SQLite টেবিল তৈরি:
import sqlite3
# SQLite ডাটাবেস সংযোগ
conn = sqlite3.connect('mydatabase.db')
cursor = conn.cursor()
# টেবিল তৈরি করা
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
age INTEGER
)
''')
conn.commit()
conn.close()
MySQL টেবিল তৈরি:
import mysql.connector
# MySQL ডাটাবেস সংযোগ
conn = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="yourdatabase"
)
cursor = conn.cursor()
# টেবিল তৈরি করা
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
age INT
)
''')
conn.commit()
conn.close()
PostgreSQL টেবিল তৈরি:
import psycopg2
# PostgreSQL ডাটাবেস সংযোগ
conn = psycopg2.connect(
host="localhost",
dbname="yourdatabase",
user="yourusername",
password="yourpassword"
)
cursor = conn.cursor()
# টেবিল তৈরি করা
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
age INT
)
''')
conn.commit()
conn.close()
CherryPy-তে ডাটাবেস সংযোগ করার জন্য SQLite, MySQL, এবং PostgreSQL ব্যবহার করা যায়, এবং Python এর বিভিন্ন লাইব্রেরি (sqlite3, mysql-connector-python, psycopg2) এর মাধ্যমে সহজে ডাটাবেসের সাথে ইন্টারঅ্যাক্ট করা যায়। CherryPy অ্যাপ্লিকেশন তৈরি করার সময় এই ডাটাবেস সংযোগ ব্যবহার করে আপনি ডাইনামিক ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারেন যেখানে ডেটা ভান্ডার হিসেবে কোনো একটি রিলেশনাল ডাটাবেস ব্যবহৃত হবে।
CherryPy এবং SQLAlchemy ব্যবহার করে ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করা একটি শক্তিশালী সমাধান। SQLAlchemy হলো একটি জনপ্রিয় Object-Relational Mapper (ORM), যা পাইথনের ডেটাবেস ইন্টারঅ্যাকশন সহজ করে। এটি ডেটাবেসের সারণী (tables) এবং রেকর্ডগুলিকে পাইথন ক্লাস এবং অবজেক্টে রূপান্তরিত করে, যার ফলে ডেটাবেসের সাথে কাজ করা আরও সহজ ও সুসংগঠিত হয়।
এই গাইডে আমরা CherryPy অ্যাপ্লিকেশন তৈরি করব যা SQLAlchemy ORM ব্যবহার করে ডেটাবেসের সাথে সংযোগ স্থাপন করবে এবং ডেটা ম্যানেজমেন্ট করবে।
প্রয়োজনীয়তা
প্রথমে কিছু প্যাকেজ ইনস্টল করতে হবে:
pip install cherrypy sqlalchemy
যদি আপনার ডেটাবেসের জন্য SQLite, MySQL, বা PostgreSQL ব্যবহার করতে চান, তবে উপযুক্ত ড্রাইভারও ইনস্টল করতে হবে।
- SQLite: SQLAlchemy সাধারণত SQLite ড্রাইভার নিয়ে আসে।
- MySQL:
pip install mysqlclient - PostgreSQL:
pip install psycopg2
CherryPy এবং SQLAlchemy সেটআপ
১. SQLAlchemy সেটআপ
SQLAlchemy তে একটি ডেটাবেস মডেল তৈরি করা এবং সেশন (Session) তৈরি করা প্রয়োজন।
উদাহরণ: models.py (SQLAlchemy মডেল)
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
# SQLAlchemy বেস ক্লাস
Base = declarative_base()
# ডেটাবেসের টেবিল মডেল
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
email = Column(String)
def __init__(self, name, email):
self.name = name
self.email = email
# SQLAlchemy ইঞ্জিন (SQLite ডেটাবেস ব্যবহার করা হচ্ছে)
engine = create_engine('sqlite:///example.db', echo=True)
# টেবিল তৈরি করা
Base.metadata.create_all(engine)
# সেশন প্রস্তুত করা
Session = sessionmaker(bind=engine)
session = Session()
এই কোডে:
Userক্লাসটি একটি SQLAlchemy মডেল, যা ডেটাবেসেরusersটেবিলের সাথে সম্পর্কিত।engineহল ডেটাবেসের সাথে সংযোগ করার জন্য ব্যবহৃত, এবং এটি SQLite ডেটাবেস ফাইলexample.dbএ সংযুক্ত।sessionহল SQLAlchemy সেশন, যা ডেটাবেসের সাথে কাজ করার জন্য ব্যবহৃত।
২. CherryPy অ্যাপ্লিকেশন তৈরি
এখন CherryPy অ্যাপ্লিকেশন তৈরি করা যাক, যা ডেটাবেস থেকে ডেটা পড়বে এবং ইনসার্ট করবে।
উদাহরণ: app.py (CherryPy অ্যাপ)
import cherrypy
from models import session, User # models.py থেকে session এবং User ক্লাস ইমপোর্ট
class MyApp:
@cherrypy.expose
def index(self):
# ডেটাবেস থেকে ইউজারদের প্রাপ্তি
users = session.query(User).all()
users_list = "<br>".join([f"{user.id}. {user.name} ({user.email})" for user in users])
return f"Users in database:<br>{users_list}"
@cherrypy.expose
def add_user(self, name, email):
# নতুন ইউজার ইনসার্ট করা
new_user = User(name=name, email=email)
session.add(new_user)
session.commit()
return f"User {name} added successfully!"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে:
indexমেথডটি ডেটাবেস থেকে সব ইউজারকে পাঠায়।add_userমেথডটি একটি নতুন ইউজার যোগ করে এবং ডেটাবেসে সংরক্ষণ করে।
৩. CherryPy চালানো
এখন CherryPy সার্ভার চালানোর জন্য টার্মিনালে এই কমান্ডটি দিন:
python app.py
এরপর ব্রাউজারে গিয়ে http://127.0.0.1:8080 এ গিয়ে অ্যাপটি দেখুন।
- রুট পেজ (index): ইউজারদের তালিকা দেখাবে।
/add_userপাথ: নতুন ইউজার যোগ করার জন্যnameএবংemailপ্যারামিটার সহ POST রিকোয়েস্ট পাঠাতে হবে, যেমন:http://127.0.0.1:8080/add_user?name=John&email=john@example.com
SQLAlchemy এবং CherryPy এর সাথে উন্নত ফিচার
- ব্যাচ ইনসার্ট: একাধিক রেকর্ড একসাথে ইনসার্ট করার জন্য
session.add_all([user1, user2])ব্যবহার করা যায়। - কুয়েরি অপটিমাইজেশন: প্রয়োজন হলে ডেটাবেস কুয়েরি অপটিমাইজ করার জন্য
filter(),filter_by(),join()ইত্যাদি ব্যবহার করা যেতে পারে। - ব্যতিক্রম হ্যান্ডলিং: ডেটাবেসে ত্রুটি ঘটলে তা
try-exceptব্লক ব্যবহার করে সঠিকভাবে হ্যান্ডল করা যেতে পারে।
CherryPy এবং SQLAlchemy একত্রে ব্যবহার করে আপনি সহজেই ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারেন যা ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করে। SQLAlchemy ORM আপনাকে ডেটাবেসের সাথে কাজ করতে শক্তিশালী এবং সহজ উপায় প্রদান করে, এবং CherryPy আপনাকে একটি দ্রুত, সিম্পল এবং ফ্লেক্সিবল ওয়েব সার্ভার তৈরি করতে সহায়তা করে।
CherryPy ওয়েব ফ্রেমওয়ার্ক ব্যবহার করে আপনি খুব সহজেই CRUD (Create, Read, Update, Delete) অপারেশনস বাস্তবায়ন করতে পারেন। CRUD অপারেশনস হল ওয়েব অ্যাপ্লিকেশনের বেসিক ফিচার, যেখানে ইউজার ডেটা তৈরি, পড়া, আপডেট এবং মুছে ফেলতে পারে।
এই টিউটোরিয়ালে আমরা দেখবো কীভাবে CherryPy ব্যবহার করে একটি সাধারণ CRUD অ্যাপ তৈরি করা যায়। এখানে আমরা JSON ফরম্যাটে ডেটা সংরক্ষণ এবং পরিচালনা করবো।
1. Create (তৈরি করা)
Create অপারেশনটি নতুন ডেটা তৈরি করার জন্য ব্যবহৃত হয়। একটি নতুন রেকর্ড যুক্ত করতে HTTP POST মেথড ব্যবহার করা হয়।
উদাহরণ: Create অপারেশন
import cherrypy
import json
class MyApp:
def __init__(self):
self.data = []
@cherrypy.expose
def index(self):
return "CRUD অ্যাপ্লিকেশনে স্বাগতম!"
@cherrypy.expose
def create(self, name, age):
new_record = {"name": name, "age": age}
self.data.append(new_record)
return json.dumps({"status": "success", "message": "রেকর্ড তৈরি হয়েছে!"})
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
ব্যাখ্যা:
createমেথডেnameএবংageপ্যারামিটার গ্রহণ করা হয়।- ডেটা
self.dataলিস্টে সংরক্ষিত হয়। json.dumps()ব্যবহার করে JSON রেসপন্স প্রদান করা হয়।
2. Read (পড়া)
Read অপারেশনটি ডেটা পড়ার জন্য ব্যবহৃত হয়। এটি সাধারণত HTTP GET মেথড ব্যবহার করে।
উদাহরণ: Read অপারেশন
import cherrypy
import json
class MyApp:
def __init__(self):
self.data = []
@cherrypy.expose
def index(self):
return "CRUD অ্যাপ্লিকেশনে স্বাগতম!"
@cherrypy.expose
def create(self, name, age):
new_record = {"name": name, "age": age}
self.data.append(new_record)
return json.dumps({"status": "success", "message": "রেকর্ড তৈরি হয়েছে!"})
@cherrypy.expose
def read(self):
return json.dumps(self.data)
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
ব্যাখ্যা:
readমেথডেself.dataলিস্টের সমস্ত ডেটা JSON ফরম্যাটে ফেরত দেওয়া হয়।- ব্রাউজারে
http://127.0.0.1:8080/readURL এ গিয়ে সমস্ত ডেটা দেখতে পারবেন।
3. Update (আপডেট)
Update অপারেশনটি বিদ্যমান ডেটা আপডেট করার জন্য ব্যবহৃত হয়। এটি HTTP PUT মেথড দিয়ে কাজ করে।
উদাহরণ: Update অপারেশন
import cherrypy
import json
class MyApp:
def __init__(self):
self.data = []
@cherrypy.expose
def index(self):
return "CRUD অ্যাপ্লিকেশনে স্বাগতম!"
@cherrypy.expose
def create(self, name, age):
new_record = {"name": name, "age": age}
self.data.append(new_record)
return json.dumps({"status": "success", "message": "রেকর্ড তৈরি হয়েছে!"})
@cherrypy.expose
def read(self):
return json.dumps(self.data)
@cherrypy.expose
def update(self, index, name=None, age=None):
if index.isdigit() and int(index) < len(self.data):
record = self.data[int(index)]
if name:
record["name"] = name
if age:
record["age"] = age
return json.dumps({"status": "success", "message": "রেকর্ড আপডেট হয়েছে!"})
return json.dumps({"status": "error", "message": "অবৈধ ইনডেক্স!"})
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
ব্যাখ্যা:
updateমেথডে ইনডেক্স প্যারামিটার সহ ডেটা আপডেট করা হয়।- ইনডেক্সের মাধ্যমে সংশ্লিষ্ট রেকর্ডটি খুঁজে নিয়ে,
nameবাageপ্যারামিটার গুলির মান পরিবর্তন করা হয়। http://127.0.0.1:8080/update?index=0&name=John&age=30URL দিয়ে রেকর্ড আপডেট করা যায়।
4. Delete (মুছে ফেলা)
Delete অপারেশনটি ডেটা মুছে ফেলার জন্য ব্যবহৃত হয়। এটি HTTP DELETE মেথড দিয়ে কাজ করে।
উদাহরণ: Delete অপারেশন
import cherrypy
import json
class MyApp:
def __init__(self):
self.data = []
@cherrypy.expose
def index(self):
return "CRUD অ্যাপ্লিকেশনে স্বাগতম!"
@cherrypy.expose
def create(self, name, age):
new_record = {"name": name, "age": age}
self.data.append(new_record)
return json.dumps({"status": "success", "message": "রেকর্ড তৈরি হয়েছে!"})
@cherrypy.expose
def read(self):
return json.dumps(self.data)
@cherrypy.expose
def update(self, index, name=None, age=None):
if index.isdigit() and int(index) < len(self.data):
record = self.data[int(index)]
if name:
record["name"] = name
if age:
record["age"] = age
return json.dumps({"status": "success", "message": "রেকর্ড আপডেট হয়েছে!"})
return json.dumps({"status": "error", "message": "অবৈধ ইনডেক্স!"})
@cherrypy.expose
def delete(self, index):
if index.isdigit() and int(index) < len(self.data):
del self.data[int(index)]
return json.dumps({"status": "success", "message": "রেকর্ড মুছে ফেলা হয়েছে!"})
return json.dumps({"status": "error", "message": "অবৈধ ইনডেক্স!"})
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
ব্যাখ্যা:
deleteমেথডে ইনডেক্স প্যারামিটার ব্যবহার করে ডেটা মুছে ফেলা হয়।http://127.0.0.1:8080/delete?index=0URL দিয়ে রেকর্ড মুছে ফেলা যায়।
সম্পূর্ণ উদাহরণ:
import cherrypy
import json
class MyApp:
def __init__(self):
self.data = []
@cherrypy.expose
def index(self):
return "CRUD অ্যাপ্লিকেশনে স্বাগতম!"
@cherrypy.expose
def create(self, name, age):
new_record = {"name": name, "age": age}
self.data.append(new_record)
return json.dumps({"status": "success", "message": "রেকর্ড তৈরি হয়েছে!"})
@cherrypy.expose
def read(self):
return json.dumps(self.data)
@cherrypy.expose
def update(self, index, name=None, age=None):
if index.isdigit() and int(index) < len(self.data):
record = self.data[int(index)]
if name:
record["name"] = name
if age:
record["age"] = age
return json.dumps({"status": "success", "message": "রেকর্ড আপডেট হয়েছে!"})
return json.dumps({"status": "error", "message": "অবৈধ ইনডেক্স!"})
@cherrypy.expose
def delete(self, index):
if index.isdigit() and int(index) < len(self.data):
del self.data[int(index)]
return json.dumps({"status": "success", "message": "রেকর্ড মুছে ফেলা হয়েছে!"})
return json.dumps({"status": "error", "message": "অবৈধ ইনডেক্স!"})
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
CherryPy তে CRUD অপারেশনস বাস্তবায়ন করা খুবই সহজ এবং কার্যকর। আপনি HTTP POST, GET, PUT, এবং DELETE মেথডের মাধ্যমে ডেটা তৈরি, পড়া, আপডেট এবং মুছে ফেলতে পারেন। CherryPy এর এই ক্ষমতা আপনাকে একটি সম্পূর্ণ ওয়েব অ্যাপ্লিকেশন তৈরি করতে সাহায্য করবে যেখানে ডেটা পরিচালনা করা যায়।
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