Flask অ্যাপ্লিকেশনগুলিতে ডেটাবেস ব্যবস্থাপনার জন্য Flask-SQLAlchemy একটি জনপ্রিয় এক্সটেনশন যা SQLAlchemy ORM (Object Relational Mapping) এর সাহায্যে ডেটাবেস মডেল তৈরি, ডেটা ম্যানেজমেন্ট, এবং সম্পর্ক (Relationships) পরিচালনা করতে সাহায্য করে। এই টিউটোরিয়ালে আমরা Database Models এবং ডেটাবেস সম্পর্কের দুইটি সাধারণ ধরনের (One-to-Many এবং Many-to-Many) ব্যাখ্যা করব।
১. Flask-SQLAlchemy সেটআপ
প্রথমে Flask-SQLAlchemy ইনস্টল করতে হবে:
pip install flask-sqlalchemy
এবং Flask অ্যাপ্লিকেশনে এটি ব্যবহার করার জন্য নীচের কোডটি ব্যবহার করতে হবে:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db' # ডাটাবেস URI
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # অতিরিক্ত ট্যাকিং নিষ্ক্রিয়
db = SQLAlchemy(app) # SQLAlchemy ইনিশিয়ালাইজ
if __name__ == "__main__":
app.run(debug=True)
এখন আমরা Flask-SQLAlchemy ব্যবহার করে Database Models তৈরি করতে পারি।
২. Database Models
Flask-SQLAlchemy তে Model হলো একটি Python ক্লাস যা একটি ডেটাবেস টেবিলের প্রতিনিধিত্ব করে। এটি SQLAlchemy ORM ব্যবহার করে ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করতে সক্ষম।
উদাহরণ: User Model
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
def __repr__(self):
return f'<User {self.username}>'
এখানে:
db.Model: এটি Flask-SQLAlchemy এর মডেল ক্লাস, যা আপনার ডেটাবেস মডেলটিকে ডেটাবেস টেবিলের সাথে সংযুক্ত করে।id,username,email: এগুলি হল কলামগুলো যা ডেটাবেস টেবিলের অংশ।__repr__: এটি একটি রেপ্রেজেন্টেশন মেথড, যা মডেল অবজেক্টের একটি স্ট্রিং রিপ্রেজেন্টেশন প্রদান করে।
৩. One-to-Many Relationship
One-to-Many সম্পর্ক এমন একটি সম্পর্ক যেখানে একটি রেকর্ড (এখানে, Parent Model) একাধিক সম্পর্কিত রেকর্ড (এখানে, Child Model) এর সাথে যুক্ত থাকে।
উদাহরণ: Author এবং Post (One-to-Many)
একজন লেখক (Author) অনেকগুলি পোস্ট (Post) লিখতে পারে। এই সম্পর্কটি One-to-Many সম্পর্ক।
class Author(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), unique=True, nullable=False)
posts = db.relationship('Post', backref='author', lazy=True)
def __repr__(self):
return f'<Author {self.name}>'
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(120), nullable=False)
content = db.Column(db.Text, nullable=False)
author_id = db.Column(db.Integer, db.ForeignKey('author.id'), nullable=False)
def __repr__(self):
return f'<Post {self.title}>'
এখানে:
author_id:Postমডেলে একটি Foreign Key হিসেবেauthor.idসংযুক্ত হয়েছে, যা One-to-Many সম্পর্কের প্রতিনিধিত্ব করে।posts = db.relationship('Post', backref='author', lazy=True):Authorমডেলে একটি relationship তৈরি করা হয়েছে, যা নির্দেশ করে যে একেকজন লেখকের অনেকগুলি পোস্ট থাকতে পারে।
ডেটা যোগ করার উদাহরণ:
# এক Author এর সাথে অনেক Post যুক্ত করা
author = Author(name="John Doe")
db.session.add(author)
db.session.commit()
post1 = Post(title="First Post", content="This is the first post.", author_id=author.id)
post2 = Post(title="Second Post", content="This is the second post.", author_id=author.id)
db.session.add(post1)
db.session.add(post2)
db.session.commit()
৪. Many-to-Many Relationship
Many-to-Many সম্পর্ক এমন একটি সম্পর্ক যেখানে একটি রেকর্ড অনেকগুলো সম্পর্কিত রেকর্ডের সাথে যুক্ত থাকতে পারে এবং অপর সম্পর্কিত রেকর্ডও একইভাবে অনেক রেকর্ডের সাথে যুক্ত থাকতে পারে।
উদাহরণ: Students এবং Courses (Many-to-Many)
একজন ছাত্র (Student) অনেকগুলি কোর্স (Course) নিতে পারে এবং একটি কোর্সে (Course) অনেক ছাত্র থাকতে পারে।
# Association table (যেখানে ছাত্র এবং কোর্সের সম্পর্ক থাকবে)
student_course = db.Table('student_course',
db.Column('student_id', db.Integer, db.ForeignKey('student.id'), primary_key=True),
db.Column('course_id', db.Integer, db.ForeignKey('course.id'), primary_key=True)
)
class Student(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), nullable=False)
courses = db.relationship('Course', secondary=student_course, backref=db.backref('students', lazy=True))
def __repr__(self):
return f'<Student {self.name}>'
class Course(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100), nullable=False)
def __repr__(self):
return f'<Course {self.title}>'
এখানে:
student_course: এটি একটি association table (যোগসূত্র টেবিল), যাStudentএবংCourseমডেলের মধ্যে সম্পর্ক তৈরি করে।courses = db.relationship('Course', secondary=student_course, backref=db.backref('students', lazy=True)): এটিStudentএবংCourseএর মধ্যে Many-to-Many সম্পর্ক তৈরি করে।
ডেটা যোগ করার উদাহরণ:
# একজন Student এর সাথে অনেক Course যুক্ত করা
student = Student(name="Alice")
course1 = Course(title="Mathematics")
course2 = Course(title="Physics")
student.courses.append(course1)
student.courses.append(course2)
db.session.add(student)
db.session.commit()
এখানে:
student.courses.append(course1): একটি ছাত্রকে কোর্সের সাথে যুক্ত করা হয়েছে।
৫. Flask-SQLAlchemy তে Relationships পরিচালনা
- One-to-Many সম্পর্কের জন্য আপনি
db.relationship()এবংdb.ForeignKey()ব্যবহার করতে পারেন, যেমনPostএবংAuthorএর মধ্যে। - Many-to-Many সম্পর্কের জন্য আপনি একটি association table ব্যবহার করবেন, যেটি দুইটি মডেলের মধ্যে সম্পর্ক তৈরি করবে।
Flask-SQLAlchemy ব্যবহার করে Database Models তৈরি এবং Relationships (One-to-Many, Many-to-Many) পরিচালনা করা খুবই সহজ এবং কার্যকর। আপনি সহজেই Foreign Key এবং Association Table ব্যবহার করে সম্পর্ক তৈরি করতে পারেন এবং ডেটাবেসে বিভিন্ন রেকর্ডের মধ্যে সম্পর্ক স্থাপন করতে পারেন। এই ধারণাগুলি ব্যবহার করে আপনি Flask অ্যাপ্লিকেশনে শক্তিশালী এবং নমনীয় ডেটাবেস স্ট্রাকচার তৈরি করতে পারবেন।
Read more