Skill

Flask এবং Database Integration

ফ্লাস্ক (Flask) - Web Development

385

Flask অ্যাপ্লিকেশনগুলিতে ডাটাবেস ইন্টিগ্রেশন খুবই গুরুত্বপূর্ণ একটি বিষয়। Flask মাইক্রোফ্রেমওয়ার্ক হওয়া সত্ত্বেও এটি বিভিন্ন ডাটাবেস সিস্টেমের সাথে সহজে ইন্টিগ্রেট হতে পারে, যেমন SQLAlchemy, SQLite, MySQL, PostgreSQL ইত্যাদি। Flask-এ ডাটাবেস ইন্টিগ্রেশন সাধারণত Flask-SQLAlchemy বা Flask-Peewee লাইব্রেরি ব্যবহার করে করা হয়।

এখানে Flask এবং ডাটাবেসের ইন্টিগ্রেশন কিভাবে করা যায়, তা ব্যাখ্যা করা হবে।


১. Flask এবং SQLite Integration

SQLite হল একটি সহজ এবং হালকা ডাটাবেস যা ছোট Flask অ্যাপ্লিকেশনের জন্য উপযুক্ত। Flask-SQLAlchemy ব্যবহার করে SQLite ডাটাবেস ইন্টিগ্রেশন করা যায়।

ধাপ ১: Flask-SQLAlchemy ইনস্টল করা

প্রথমে, Flask-SQLAlchemy লাইব্রেরি ইনস্টল করতে হবে।

pip install flask-sqlalchemy

ধাপ ২: SQLite ডাটাবেস কনফিগারেশন

app.py ফাইলে SQLite ডাটাবেস কনফিগার করতে নিচের কোড লিখুন:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# SQLite ডাটাবেস কনফিগারেশন
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False  # অতিরিক্ত সিগন্যাল ট্র্যাকিং নিষ্ক্রিয় করা

# SQLAlchemy ডাটাবেস অবজেক্ট তৈরি করা
db = SQLAlchemy(app)

# ডাটাবেস মডেল তৈরি করা
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(100), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

    def __repr__(self):
        return f"User('{self.username}', '{self.email}')"

@app.route('/')
def home():
    return "Flask এবং SQLite ডাটাবেস ইন্টিগ্রেশন সফল!"

if __name__ == "__main__":
    app.run(debug=True)

এখানে:

  • SQLALCHEMY_DATABASE_URI: SQLite ডাটাবেসের URI।
  • SQLALCHEMY_TRACK_MODIFICATIONS: অতিরিক্ত সিগন্যাল ট্র্যাকিং নিষ্ক্রিয় করা (ফিচারটি প্রয়োজনীয় নয়)।

ধাপ ৩: ডাটাবেস তৈরি করা

এখন, ডাটাবেস এবং মডেল তৈরি করতে Flask শেল ব্যবহার করতে হবে।

python
>>> from app import db
>>> db.create_all()

এটি site.db নামের একটি SQLite ডাটাবেস ফাইল তৈরি করবে এবং User মডেল অনুযায়ী একটি টেবিল তৈরি করবে।


২. Flask এবং MySQL/PostgreSQL Integration

MySQL বা PostgreSQL এর মতো বড় ডাটাবেস ব্যবহারের জন্য আপনি Flask-SQLAlchemy এর সাথে PyMySQL (MySQL) অথবা psycopg2 (PostgreSQL) ব্যবহার করতে পারেন।

ধাপ ১: প্রয়োজনীয় প্যাকেজ ইনস্টল করা

MySQL বা PostgreSQL এর জন্য লাইব্রেরি ইনস্টল করতে হবে:

  • MySQL এর জন্য:

    pip install flask-sqlalchemy pymysql
    
  • PostgreSQL এর জন্য:

    pip install flask-sqlalchemy psycopg2
    

ধাপ ২: ডাটাবেস কনফিগারেশন

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# MySQL কনফিগারেশন (এখানে MySQL ব্যবহার করা হয়েছে)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:password@localhost/dbname'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(100), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

    def __repr__(self):
        return f"User('{self.username}', '{self.email}')"

@app.route('/')
def home():
    return "Flask এবং MySQL/PostgreSQL ডাটাবেস ইন্টিগ্রেশন সফল!"

if __name__ == "__main__":
    app.run(debug=True)

এখানে:

  • SQLALCHEMY_DATABASE_URI: MySQL/PostgreSQL ডাটাবেস URI।
    • MySQL: mysql+pymysql://username:password@localhost/dbname
    • PostgreSQL: postgresql://username:password@localhost/dbname

৩. ডাটাবেসের সাথে ইন্টারঅ্যাকশন

ডাটাবেসে ডাটা ইনসার্ট করা

@app.route("/add_user")
def add_user():
    user = User(username='john', email='john@example.com')
    db.session.add(user)
    db.session.commit()
    return f"User {user.username} added to the database!"

এখানে:

  • db.session.add(user): নতুন user অবজেক্ট ডাটাবেসে যোগ করা হচ্ছে।
  • db.session.commit(): ডাটাবেসে পরিবর্তন জমা দেয়া।

ডাটাবেস থেকে ডাটা রিট্রিভ করা

@app.route("/get_users")
def get_users():
    users = User.query.all()  # সমস্ত ইউজার রিট্রিভ করা
    return {"users": [user.username for user in users]}

এখানে:

  • User.query.all(): User মডেলের সমস্ত রেকর্ড রিট্রিভ করা।

ডাটাবেস থেকে একক রেকর্ড পাওয়া

@app.route("/get_user/<username>")
def get_user(username):
    user = User.query.filter_by(username=username).first()
    if user:
        return f"User {user.username} found with email {user.email}"
    else:
        return "User not found", 404

এখানে:

  • User.query.filter_by(username=username).first(): ডাটাবেস থেকে নির্দিষ্ট ব্যবহারকারী (username) রিট্রিভ করা।

৪. Flask এবং Database Handling Best Practices

  1. ডাটাবেস মাইগ্রেশন: Flask অ্যাপ্লিকেশনে ডাটাবেস মডেল পরিবর্তন করার সময় Flask-Migrate ব্যবহার করে ডাটাবেস মাইগ্রেশন করা উচিত। এটি ডাটাবেসের স্কিমাতে পরিবর্তন করা সহজ করে দেয়।

    ইনস্টল করুন:

    pip install flask-migrate
    
  2. ডাটাবেস সেশন ব্যবহার: Flask-SQLAlchemy একটি সেশন ম্যানেজমেন্ট সিস্টেম সরবরাহ করে, যার মাধ্যমে আপনি ডাটাবেসে একাধিক ট্রানজেকশন পরিচালনা করতে পারেন।
  3. ডাটাবেস কানেকশন পুল: Flask অ্যাপ্লিকেশনের মধ্যে ডাটাবেস কানেকশনের একটি পুল তৈরি করার জন্য SQLAlchemy স্বয়ংক্রিয়ভাবে কানেকশন পুল ব্যবস্থাপনা করে।

Flask-এ ডাটাবেস ইন্টিগ্রেশন খুবই সহজ এবং শক্তিশালী। আপনি SQLite, MySQL, PostgreSQL সহ বিভিন্ন ডাটাবেস সিস্টেমের সাথে Flask অ্যাপ্লিকেশন ইন্টিগ্রেট করতে পারেন। Flask-SQLAlchemy লাইব্রেরি ব্যবহার করে ডাটাবেস মডেল তৈরি, ডাটা ইনসার্ট, রিট্রিভ করা ইত্যাদি কাজগুলো অত্যন্ত সহজ হয়ে যায়। Flask-এ ডাটাবেস পরিচালনার জন্য আরো উন্নত ফিচার যেমন মাইগ্রেশন এবং সেশন ব্যবস্থাপনা করা সম্ভব।

Content added By

Flask একটি মাইক্রোফ্রেমওয়ার্ক হলেও এটি অত্যন্ত নমনীয় এবং বিভিন্ন ডাটাবেস সিস্টেমের সাথে সহজেই ইন্টিগ্রেট করা যায়। Flask ডাটাবেস পরিচালনার জন্য SQLAlchemy নামক একটি শক্তিশালী ORM (Object-Relational Mapping) লাইব্রেরি ব্যবহার করে। এই লাইব্রেরি আপনাকে SQL ডাটাবেসের সাথে কাজ করতে সাহায্য করে, যেমন SQLite, MySQL, এবং PostgreSQL

এই টিউটোরিয়ালে আমরা দেখব কীভাবে Flask-এ SQLite, MySQL এবং PostgreSQL ডাটাবেস ইন্টিগ্রেট করা যায়।


১. Flask এর সাথে SQLite ইন্টিগ্রেশন

SQLite হলো একটি হালকা, সার্ভারবিহীন ডাটাবেস, যা সাধারণত ছোট প্রজেক্টের জন্য ব্যবহৃত হয়। Flask-এ SQLite ব্যবহার করা খুবই সহজ।

ধাপ ১: Flask অ্যাপ তৈরি এবং SQLAlchemy ইনস্টল করা

প্রথমে Flask এবং SQLAlchemy ইনস্টল করুন:

pip install flask flask-sqlalchemy

ধাপ ২: Flask অ্যাপে SQLite ডাটাবেস ইন্টিগ্রেট করা

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# SQLite ডাটাবেস URI
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

# SQLAlchemy ইনিশিয়ালাইজ করা
db = SQLAlchemy(app)

# মডেল তৈরি করা
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(120), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

    def __repr__(self):
        return f"User('{self.username}', '{self.email}')"

# ডাটাবেস তৈরি করা
with app.app_context():
    db.create_all()

if __name__ == "__main__":
    app.run(debug=True)

এখানে:

  • SQLALCHEMY_DATABASE_URI: এটি SQLite ডাটাবেসের URI, যেখানে sqlite:///site.db ব্যবহৃত হয়েছে।
  • db.create_all(): এটি ডাটাবেস তৈরি করার জন্য ব্যবহৃত হয়।

এই অ্যাপটি চালানোর পর SQLite ডাটাবেসে একটি site.db ফাইল তৈরি হবে, যা User মডেলটির ডাটা ধারণ করবে।


২. Flask এর সাথে MySQL ইন্টিগ্রেশন

MySQL একটি শক্তিশালী রিলেশনাল ডাটাবেস, যা বড় এবং স্কেলযোগ্য অ্যাপ্লিকেশনের জন্য ব্যবহৃত হয়। Flask-এ MySQL ব্যবহার করতে MySQLdb বা Flask-MySQLdb এক্সটেনশন ব্যবহার করা হয়।

ধাপ ১: MySQL ইনস্টলেশন

প্রথমে, Flask এর সাথে MySQL ব্যবহারের জন্য Flask-MySQLdb ইনস্টল করুন:

pip install flask-mysqldb

ধাপ ২: Flask অ্যাপে MySQL ডাটাবেস ইন্টিগ্রেট করা

from flask import Flask, render_template
from flask_mysqldb import MySQL

app = Flask(__name__)

# MySQL কনফিগারেশন সেট করা
app.config['MYSQL_HOST'] = 'localhost'
app.config['MYSQL_USER'] = 'root'
app.config['MYSQL_PASSWORD'] = 'yourpassword'
app.config['MYSQL_DB'] = 'flask_db'

# MySQL ইনিশিয়ালাইজ করা
mysql = MySQL(app)

@app.route("/")
def index():
    cur = mysql.connection.cursor()
    cur.execute("SELECT * FROM users")
    users = cur.fetchall()
    return str(users)

if __name__ == "__main__":
    app.run(debug=True)

এখানে:

  • MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD, এবং MYSQL_DB: MySQL ডাটাবেসের সংযোগ তথ্য।

এই কোডে MySQL ডাটাবেসে users টেবিল থেকে ডাটা নেয়া হচ্ছে। আপনার ডাটাবেসে users টেবিল তৈরি করতে হবে।

MySQL ডাটাবেস টেবিল তৈরি করা:

MySQL তে টেবিল তৈরি করার জন্য নিচের SQL কোড ব্যবহার করতে পারেন:

CREATE DATABASE flask_db;
USE flask_db;

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(100),
    email VARCHAR(100)
);

৩. Flask এর সাথে PostgreSQL ইন্টিগ্রেশন

PostgreSQL একটি শক্তিশালী ওপেন-সোর্স ডাটাবেস সিস্টেম। Flask-এ PostgreSQL ইন্টিগ্রেট করতে psycopg2 এবং Flask-SQLAlchemy ব্যবহার করা হয়।

ধাপ ১: PostgreSQL ইনস্টলেশন

প্রথমে, Flask অ্যাপ্লিকেশনে PostgreSQL ব্যবহারের জন্য psycopg2 ইনস্টল করতে হবে:

pip install psycopg2 flask-sqlalchemy

ধাপ ২: Flask অ্যাপে PostgreSQL ডাটাবেস ইন্টিগ্রেট করা

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# PostgreSQL ডাটাবেস URI
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://username:password@localhost/dbname'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

# SQLAlchemy ইনিশিয়ালাইজ করা
db = SQLAlchemy(app)

# মডেল তৈরি করা
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(120), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

    def __repr__(self):
        return f"User('{self.username}', '{self.email}')"

# ডাটাবেস তৈরি করা
with app.app_context():
    db.create_all()

if __name__ == "__main__":
    app.run(debug=True)

এখানে:

  • SQLALCHEMY_DATABASE_URI: PostgreSQL ডাটাবেসের URI, যেখানে postgresql://username:password@localhost/dbname ব্যবহার করা হয়েছে।
  • db.create_all(): এটি PostgreSQL ডাটাবেসে টেবিল তৈরি করার জন্য ব্যবহৃত হয়।

এই কোডটি চালানোর পর PostgreSQL ডাটাবেসে একটি User মডেল তৈরি হবে।

PostgreSQL ডাটাবেস টেবিল তৈরি করা:

PostgreSQL তে টেবিল তৈরি করার জন্য নিচের SQL কোড ব্যবহার করতে পারেন:

CREATE DATABASE flask_db;
\c flask_db;

CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    username VARCHAR(100),
    email VARCHAR(100)
);

Flask-এর সাথে SQLite, MySQL, এবং PostgreSQL ইন্টিগ্রেশন খুবই সহজ এবং ফ্লেক্সিবল। Flask-এ SQLAlchemy ব্যবহার করে আপনি যেকোনো রিলেশনাল ডাটাবেসের সাথে কাজ করতে পারেন।

  • SQLite সাধারণত ছোট এবং মাঝারি আকারের প্রজেক্টের জন্য ব্যবহার হয়।
  • MySQL এবং PostgreSQL বৃহৎ এবং স্কেলযোগ্য অ্যাপ্লিকেশনের জন্য উপযুক্ত।
Content added By

Flask-এ SQLAlchemy হলো একটি শক্তিশালী Object Relational Mapping (ORM) লাইব্রেরি যা Python এবং SQL ডাটাবেসের মধ্যে সম্পর্ক তৈরি করে। এটি ডাটাবেসের সাথে যোগাযোগের জন্য SQL কোড লেখার পরিবর্তে Python ক্লাস ব্যবহার করে ডেটা ম্যানিপুলেট করতে সাহায্য করে। Flask-এ SQLAlchemy ব্যবহারের মাধ্যমে আপনি ডাটাবেস পরিচালনা করতে পারেন সহজে এবং সুসংগঠিতভাবে।


SQLAlchemy ORM এর সুবিধা

  1. ডাটাবেস মডেলিং: Python ক্লাসের মাধ্যমে ডাটাবেস টেবিলের মডেল তৈরি করা যায়।
  2. ডাটাবেস কুয়েরি: SQLAlchemy সহজেই ডাটাবেস থেকে ডেটা ইস্যু করার জন্য ব্যবহার করা যায়।
  3. ডাটাবেস মাইগ্রেশন: SQLAlchemy Flask-Migrate এর মাধ্যমে ডাটাবেসের কাঠামো আপডেট করা যায়।
  4. দ্রুত ডেভেলপমেন্ট: ORM ব্যবহারের মাধ্যমে SQL কোড কমিয়ে দ্রুত ডেভেলপমেন্ট সম্ভব।

Flask অ্যাপে SQLAlchemy ORM ব্যবহার করার ধাপসমূহ

ধাপ ১: Flask অ্যাপ্লিকেশন তৈরি এবং SQLAlchemy ইনস্টলেশন

প্রথমে Flask অ্যাপ তৈরি করতে হবে এবং Flask-SQLAlchemy প্যাকেজটি ইনস্টল করতে হবে।

  1. Flask-SQLAlchemy ইনস্টল করুন:

    pip install flask-sqlalchemy
    
  2. Flask অ্যাপ্লিকেশন তৈরি করুন: Flask অ্যাপের জন্য একটি ফোল্ডার তৈরি করুন এবং app.py ফাইল তৈরি করুন।

ধাপ ২: Flask অ্যাপে SQLAlchemy কনফিগারেশন

Flask অ্যাপে SQLAlchemy ব্যবহার করতে হলে প্রথমে ডাটাবেস কনফিগারেশন সেট করতে হবে।

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# ডাটাবেস URI কনফিগারেশন
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'  # SQLite ডাটাবেস
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False  # অপ্রয়োজনীয় পরিবর্তন ট্র্যাকিং বন্ধ

# SQLAlchemy ইনিশিয়ালাইজ করা
db = SQLAlchemy(app)

if __name__ == "__main__":
    app.run(debug=True)

এখানে:

  • SQLALCHEMY_DATABASE_URI: ডাটাবেসের URI নির্ধারণ করে (এখানে SQLite ডাটাবেস ব্যবহার করা হয়েছে)।
  • SQLALCHEMY_TRACK_MODIFICATIONS: অপ্রয়োজনীয় ট্র্যাকিং বন্ধ করতে এটি False রাখা হয়েছে।

ধাপ ৩: ডাটাবেস মডেল তৈরি

SQLAlchemy ORM এর মাধ্যমে Python ক্লাস দিয়ে ডাটাবেস মডেল তৈরি করা হয়, যেখানে প্রতিটি ক্লাস একটি ডাটাবেস টেবিলকে উপস্থাপন করে।

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}>"

এখানে:

  • User ক্লাস একটি ডাটাবেস টেবিলের প্রতিনিধিত্ব করে।
  • id: এটি প্রাইমারি কিপ হিসেবে ব্যবহৃত হয়।
  • username এবং email: টেবিলের অন্যান্য কলাম।

ধাপ ৪: ডাটাবেস টেবিল তৈরি

Flask-এ ডাটাবেস টেবিল তৈরি করতে SQLAlchemy ORM ব্যবহার করা হয়। এর জন্য প্রথমে Python শেল অথবা Flask shell চালু করতে হবে এবং তারপর db.create_all() ফাংশন ব্যবহার করতে হবে।

with app.app_context():
    db.create_all()

এটি ডাটাবেসের সাথে সংযুক্ত হবে এবং User টেবিল তৈরি করবে। যদি আপনি নতুন টেবিল তৈরি করতে চান, তবে এই কমান্ডটি ব্যবহার করতে হবে।


ধাপ ৫: ডাটাবেসে ডেটা ইনসার্ট করা

এখন আপনি নতুন ডেটা ইনসার্ট করতে পারেন:

# নতুন ইউজার তৈরি
new_user = User(username='john_doe', email='john.doe@example.com')

# ডাটাবেসে যোগ করা
db.session.add(new_user)
db.session.commit()

এখানে:

  • db.session.add(): নতুন ইউজার অ্যাড করা।
  • db.session.commit(): পরিবর্তন ডাটাবেসে সংরক্ষণ করা।

ধাপ ৬: ডাটাবেস থেকে ডেটা পড়া

ডাটাবেস থেকে ডেটা রিট্রিভ করার জন্য SQLAlchemy ORM-এর মাধ্যমে কুয়েরি ব্যবহার করা হয়।

user = User.query.filter_by(username='john_doe').first()
print(user.email)

এখানে:

  • User.query.filter_by(): ইউজারের নাম অনুসারে কুয়েরি চালানো হচ্ছে।
  • first(): প্রথম মেলে এমন রেকর্ড রিটার্ন করা।

ধাপ ৭: ডাটাবেস থেকে ডেটা আপডেট করা

ডেটা আপডেট করার জন্য:

user = User.query.filter_by(username='john_doe').first()
user.email = 'new.email@example.com'
db.session.commit()

এখানে:

  • user.email = 'new.email@example.com': ইমেল আপডেট করা হয়েছে।
  • db.session.commit(): পরিবর্তন সেভ করা।

ধাপ ৮: ডাটাবেস থেকে ডেটা ডিলিট করা

ডেটা ডিলিট করতে:

user = User.query.filter_by(username='john_doe').first()
db.session.delete(user)
db.session.commit()

এখানে:

  • db.session.delete(): ইউজারকে ডিলিট করা।
  • db.session.commit(): পরিবর্তন সেভ করা।

Flask-এ SQLAlchemy ORM ব্যবহারের সুবিধা

  1. সোজাসুজি কোড: ডাটাবেসের সাথে সম্পর্কিত কাজ Python ক্লাসের মাধ্যমে করা যায়, SQL কোড কমানো সম্ভব।
  2. ডাটাবেস ইন্টারঅ্যাকশন: SQLAlchemy ORM ব্যবহার করে ডাটাবেসের সঙ্গে ইন্টারঅ্যাকশন সহজ এবং কার্যকর।
  3. নিরাপত্তা: SQL কোডের পাশাপাশি SQL Injection প্রতিরোধের জন্য ORM নিরাপদ উপায় প্রদান করে।
  4. মাইগ্রেশন: Flask-Migrate-এর মাধ্যমে ডাটাবেস মাইগ্রেশন সহজ হয়।

Flask-এ SQLAlchemy ORM ব্যবহার করে ডাটাবেস ম্যানেজমেন্ট খুবই শক্তিশালী এবং সহজ। এটি ডাটাবেস মডেলিং, কুয়েরি চালানো, ডেটা ইনসার্ট, আপডেট, এবং ডিলিট করার কাজকে অত্যন্ত সহজ করে তোলে। Flask ও SQLAlchemy এর সমন্বয়ে আপনি অত্যন্ত কার্যকরী এবং দ্রুত ডাটাবেস পরিচালনা করতে পারেন।

Content added By

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

Flask অ্যাপ্লিকেশন তৈরির সময় CRUD (Create, Read, Update, Delete) অপারেশনগুলি খুবই গুরুত্বপূর্ণ। এগুলি আপনাকে একটি ডাটাবেসের সঙ্গে ইন্টারঅ্যাক্ট করতে, ডেটা তৈরি, পড়া, আপডেট এবং মুছে ফেলার সুযোগ দেয়। এই গাইডে, আমরা দেখব কিভাবে Flask ব্যবহার করে CRUD অপারেশন তৈরি করতে হয়, ডাটাবেসের সাথে ইন্টিগ্রেট করতে এবং ডেটা ম্যানেজমেন্টে এই অপারেশনগুলো ব্যবহার করতে হয়।

ব্যবহৃত টুলস:

  1. Flask: ওয়েব ফ্রেমওয়ার্ক।
  2. Flask-SQLAlchemy: SQLAlchemy ব্যবহারের জন্য Flask এক্সটেনশন। এটি ডাটাবেসের সাথে যোগাযোগ সহজ করে।

১. প্রাথমিক সেটআপ

প্রথমে Flask এবং Flask-SQLAlchemy ইন্সটল করতে হবে:

pip install flask flask-sqlalchemy

২. Flask অ্যাপ্লিকেশন তৈরি

ধাপ ১: app.py ফাইল তৈরি করুন

এখন Flask অ্যাপ এবং SQLAlchemy কনফিগারেশন সেটআপ করব।

from flask import Flask, render_template, request, redirect, url_for
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# ডাটাবেস কনফিগারেশন
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db'  # SQLite ডাটাবেস
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False  # অতিরিক্ত ট্যাকিং বন্ধ করা
db = SQLAlchemy(app)

# User মডেল
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), nullable=False)
    email = db.Column(db.String(100), nullable=False, unique=True)

    def __repr__(self):
        return f'<User {self.name}>'

# ডাটাবেস টেবিল তৈরি করা
with app.app_context():
    db.create_all()

@app.route("/")
def index():
    users = User.query.all()  # সমস্ত ব্যবহারকারীকে ডাটাবেস থেকে নিয়ে আসা
    return render_template('index.html', users=users)

এখানে:

  • SQLAlchemy কনফিগারেশন: SQLALCHEMY_DATABASE_URI ব্যবহার করে ডাটাবেস URI সেট করা হয়েছে, যা একটি SQLite ডাটাবেসের সাথে সংযোগ করবে।
  • User মডেল: User ক্লাস ডাটাবেসের একটি টেবিল হিসেবে কাজ করে। এতে id, name, এবং email ফিল্ড রয়েছে।

৩. CRUD অপারেশন: Create, Read, Update, Delete

Create (তৈরি করা)

ব্যবহারকারী যোগ করার জন্য একটি ফর্ম তৈরি করতে হবে। এটি POST রিকোয়েস্ট গ্রহণ করবে এবং ডাটাবেসে নতুন ব্যবহারকারী যুক্ত করবে।

@app.route("/add", methods=["GET", "POST"])
def add_user():
    if request.method == "POST":
        name = request.form['name']
        email = request.form['email']
        new_user = User(name=name, email=email)
        db.session.add(new_user)
        db.session.commit()  # ডাটাবেসে সেভ করা
        return redirect(url_for('index'))  # হোম পেজে রিডাইরেক্ট
    return render_template('add_user.html')

এখানে:

  • POST রিকোয়েস্টে name এবং email ফর্মের মাধ্যমে গ্রহণ করা হয় এবং new_user তৈরি করা হয়।
  • db.session.add(): নতুন ব্যবহারকারীটি ডাটাবেসে অ্যাড করা হয়।
  • db.session.commit(): ডাটাবেসে পরিবর্তন সংরক্ষণ করা হয়।

Read (পড়া)

index() ফাংশনটি সমস্ত ব্যবহারকারীদের User.query.all() এর মাধ্যমে ডাটাবেস থেকে নিয়ে আসবে এবং index.html টেমপ্লেটে রেন্ডার করবে।

Update (আপডেট করা)

একটি নির্দিষ্ট ব্যবহারকারীকে আপডেট করতে আমরা একটি update_user রাউট তৈরি করব।

@app.route("/update/<int:id>", methods=["GET", "POST"])
def update_user(id):
    user = User.query.get_or_404(id)  # নির্দিষ্ট ব্যবহারকারী ডাটাবেস থেকে খুঁজে বের করা
    if request.method == "POST":
        user.name = request.form['name']
        user.email = request.form['email']
        db.session.commit()  # পরিবর্তন সেভ করা
        return redirect(url_for('index'))
    return render_template('update_user.html', user=user)

এখানে:

  • User.query.get_or_404(id): id এর ভিত্তিতে ডাটাবেস থেকে ব্যবহারকারী খোঁজা হয়।
  • db.session.commit(): ডাটাবেসে পরিবর্তন সংরক্ষণ করা হয়।

Delete (মুছে ফেলা)

ব্যবহারকারী মুছে ফেলার জন্য একটি delete_user রাউট তৈরি করব।

@app.route("/delete/<int:id>")
def delete_user(id):
    user = User.query.get_or_404(id)
    db.session.delete(user)  # ব্যবহারকারী ডিলিট করা
    db.session.commit()  # পরিবর্তন সেভ করা
    return redirect(url_for('index'))  # হোম পেজে রিডাইরেক্ট

এখানে:

  • db.session.delete(user): নির্দিষ্ট ব্যবহারকারীকে ডাটাবেস থেকে মুছে ফেলা হয়।
  • db.session.commit(): ডাটাবেসে পরিবর্তন সংরক্ষণ করা হয়।

৪. HTML টেমপ্লেট তৈরি

index.html (ব্যবহারকারীদের দেখানোর জন্য):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ব্যবহারকারীদের তালিকা</title>
</head>
<body>
    <h1>ব্যবহারকারীদের তালিকা</h1>
    <a href="{{ url_for('add_user') }}">নতুন ব্যবহারকারী যোগ করুন</a>
    <ul>
        {% for user in users %}
            <li>{{ user.name }} - {{ user.email }} 
                <a href="{{ url_for('update_user', id=user.id) }}">আপডেট</a> 
                <a href="{{ url_for('delete_user', id=user.id) }}">মুছে ফেলা</a>
            </li>
        {% endfor %}
    </ul>
</body>
</html>

add_user.html (ব্যবহারকারী যোগ করার জন্য):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>নতুন ব্যবহারকারী যোগ করুন</title>
</head>
<body>
    <h1>নতুন ব্যবহারকারী যোগ করুন</h1>
    <form method="POST">
        <label for="name">নাম:</label><br>
        <input type="text" id="name" name="name" required><br>
        <label for="email">ইমেইল:</label><br>
        <input type="email" id="email" name="email" required><br><br>
        <button type="submit">জমা দিন</button>
    </form>
</body>
</html>

update_user.html (ব্যবহারকারী আপডেট করার জন্য):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ব্যবহারকারী আপডেট করুন</title>
</head>
<body>
    <h1>ব্যবহারকারী আপডেট করুন</h1>
    <form method="POST">
        <label for="name">নাম:</label><br>
        <input type="text" id="name" name="name" value="{{ user.name }}" required><br>
        <label for="email">ইমেইল:</label><br>
        <input type="email" id="email" name="email" value="{{ user.email }}" required><br><br>
        <button type="submit">আপডেট করুন</button>
    </form>
</body>
</html>

Flask ব্যবহার করে CRUD অপারেশন (Create, Read, Update, Delete) তৈরি করা খুবই সহজ। Flask-SQLAlchemy-এর মাধ্যমে আপনি সহজেই ডাটাবেস পরিচালনা করতে পারেন এবং CRUD অপারেশন গুলি ওয়েব পৃষ্ঠায় প্রয়োগ করতে পারেন। এই গাইডে দেখানো হয়েছে কিভাবে Flask অ্যাপ্লিকেশনে CRUD অপারেশন তৈরি করা যায়, এবং এটি কীভাবে কাজ করে।

Content added By

Flask-এ Database Migrations ব্যবহার করা একটি গুরুত্বপূর্ণ প্রক্রিয়া যা ডাটাবেসের স্কিমাতে (schema) পরিবর্তন করার জন্য সাহায্য করে। এটি ডাটাবেসের কাঠামোকে নিরাপদে এবং নিয়ন্ত্রিতভাবে পরিবর্তন করার একটি উপায়, যাতে ডাটাবেসের তথ্য হারানো না যায়। Flask-Migrate একটি জনপ্রিয় এক্সটেনশন যা Flask অ্যাপ্লিকেশনগুলিতে মাইগ্রেশন পরিচালনা করতে Alembic ব্যবহার করে। এটি সহজে ডাটাবেসের স্কিমা পরিবর্তন এবং মাইগ্রেশন প্রক্রিয়া পরিচালনা করতে সহায়ক।


১. Flask-Migrate ইনস্টলেশন

Flask-Migrate ব্যবহার করতে হলে প্রথমে এটি ইনস্টল করতে হবে।

Flask-Migrate ইনস্টল করুন:

pip install flask-migrate

২. Flask-Migrate কনফিগারেশন

Flask-Migrate ব্যবহারের জন্য আপনাকে Flask-SQLAlchemy এবং Flask-Migrate একসাথে কনফিগার করতে হবে।

Flask-SQLAlchemy ইনস্টল করুন:

pip install flask-sqlalchemy

Flask অ্যাপ্লিকেশন সেটআপ:

এখন, একটি Flask অ্যাপ্লিকেশন তৈরি করে Flask-SQLAlchemy এবং Flask-Migrate সেটআপ করুন।

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

# অ্যাপ এবং ডাটাবেস কনফিগারেশন
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'  # SQLite ডাটাবেস
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

# ডাটাবেস এবং মাইগ্রেট ইনস্ট্যান্স তৈরি
db = SQLAlchemy(app)
migrate = Migrate(app, db)

# ডাটাবেস মডেল তৈরি
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), nullable=False)

if __name__ == "__main__":
    app.run(debug=True)

এখানে:

  • SQLALCHEMY_DATABASE_URI: ডাটাবেস URI সেট করা হয়েছে। এখানে আমরা sqlite:///app.db ব্যবহার করছি।
  • SQLALCHEMY_TRACK_MODIFICATIONS: Flask-SQLAlchemy-এর অতিরিক্ত অস্বাভাবিক কাজ বন্ধ করতে এটি False করা হয়েছে।

৩. মাইগ্রেশন ফাইল তৈরি করা

এখন মাইগ্রেশন সিস্টেমের জন্য প্রথম ফাইল তৈরি করতে হবে। এটি করতে flask db init কমান্ডটি চালান।

মাইগ্রেশন সেটআপ:

flask db init

এটি একটি migrations/ ফোল্ডার তৈরি করবে, যেখানে মাইগ্রেশন স্ক্রিপ্ট এবং ডাটাবেস মাইগ্রেশন সম্পর্কিত তথ্য থাকবে।

মডেল পরিবর্তন (যদি থাকে):

যদি আপনি নতুন কোনো মডেল বা কলাম তৈরি করেন, তাহলে Flask-Migrate এটি সনাক্ত করবে।

মাইগ্রেশন ফাইল তৈরি:

flask db migrate -m "Initial migration"

এটি একটি নতুন মাইগ্রেশন স্ক্রিপ্ট তৈরি করবে যা আপনার ডাটাবেসের বর্তমান কাঠামোকে পরবর্তী স্তরে নিয়ে যাবে।


৪. ডাটাবেস আপডেট করা

মাইগ্রেশন স্ক্রিপ্ট তৈরি হওয়ার পর, আপনাকে ডাটাবেসে এই পরিবর্তনগুলি প্রয়োগ করতে হবে।

flask db upgrade

এই কমান্ডটি ডাটাবেসের কাঠামো আপডেট করবে এবং নতুন মডেল বা কলাম সংযোজন করবে।


৫. মাইগ্রেশন যাচাই করা

আপনি যদি মডেলে কোনো পরিবর্তন করেন এবং ডাটাবেসে তা রিফ্লেক্ট না হয়, তবে আবার মাইগ্রেশন করতে হবে।

  1. মাইগ্রেশন স্ক্রিপ্ট তৈরি করুন:

    flask db migrate -m "Added new field"
    
  2. আপগ্রেড করুন:

    flask db upgrade
    

৬. মাইগ্রেশন রোলব্যাক করা

যদি আপনি পূর্ববর্তী মাইগ্রেশন অবস্থায় ফিরে যেতে চান, তাহলে downgrade কমান্ড ব্যবহার করতে পারেন।

flask db downgrade

এটি ডাটাবেসের মাইগ্রেশন স্তরকে পূর্ববর্তী অবস্থায় ফিরিয়ে নেবে।


৭. Flask-Migrate এর অন্যান্য কমান্ড

১. মাইগ্রেশন ইতিহাস দেখতে:

flask db history

এটি আপনার মাইগ্রেশন ইতিহাস দেখাবে, যাতে আপনি কোন সংস্করণ থেকে ডেটাবেস চলছে তা জানতে পারবেন।

২. ডাটাবেসে পলিগ্রাউন্ড অ্যাপ্লাই করা:

flask db stamp head

এটি আপনার ডাটাবেসকে মাইগ্রেশনের সর্বশেষ সংস্করণে সিল (stamp) করে দেবে, বিশেষ করে যখন আপনি ডাটাবেসে কোন পরিবর্তন না করলেও শুধু মাইগ্রেশন ইতিহাস আপডেট করতে চান।


Flask-Migrate এবং Alembic ব্যবহার করে Flask অ্যাপ্লিকেশনে Database Migrations পরিচালনা করা খুবই সহজ এবং কার্যকর। এই প্রক্রিয়া ডাটাবেসে স্কিমার পরিবর্তনগুলো নিরাপদে এবং নিয়ন্ত্রিতভাবে বাস্তবায়ন করতে সাহায্য করে। Flask-Migrate ব্যবহার করে ডাটাবেসের কাঠামো আপডেট করা, রোলব্যাক করা এবং মাইগ্রেশন ইতিহাস পরিচালনা করা সম্ভব।

Content added By
Promotion

Are you sure to start over?

Loading...