Database Models এবং Relationships (One-to-Many, Many-to-Many)

Flask এবং Database Integration - ফ্লাস্ক (Flask) - Web Development

288

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 অ্যাপ্লিকেশনে শক্তিশালী এবং নমনীয় ডেটাবেস স্ট্রাকচার তৈরি করতে পারবেন।

Content added By
Promotion

Are you sure to start over?

Loading...