Database Tutorials Transaction Management এবং Nested Transactions গাইড ও নোট

254

SQLAlchemy তে Transaction Management একটি গুরুত্বপূর্ণ ধারণা, যা ডেটাবেসে একাধিক কার্যক্রম বা SQL স্টেটমেন্ট পরিচালনা করার সময় অপারেশনস কে একটি একক ইউনিট হিসেবে পরিচালনা করতে সহায়তা করে। Nested Transactions আরও উন্নত কার্যক্রম প্রদান করে, যেখানে একটি ট্রানজেকশন অন্য একটি ট্রানজেকশনের মধ্যে অবস্থিত থাকতে পারে।


Transaction Management

SQLAlchemy তে Transaction Management ডেটাবেসের সাথে কাজ করার সময় নিশ্চিত করে যে একাধিক SQL অপারেশন সঠিকভাবে একত্রে কার্যকর করা হচ্ছে, এবং কোন সমস্যা হলে সমস্ত পরিবর্তন ফিরিয়ে আনা (rollback) যাবে। SQLAlchemy তে Session অবজেক্ট ব্যবহার করে ট্রানজেকশন পরিচালনা করা হয়।

ট্রানজেকশন কী এবং এর প্রয়োজনীয়তা:

  • Atomicity: ট্রানজেকশনটি একটি একক ইউনিট হিসেবে সম্পাদিত হয়। যদি এক বা একাধিক অপারেশন ব্যর্থ হয়, তাহলে সমস্ত পরিবর্তন রোলব্যাক করা হয়।
  • Consistency: ডেটাবেস সব সময় একটি সুসংগত অবস্থায় থাকবে। ট্রানজেকশন সম্পন্ন হওয়ার পর ডেটাবেসে সব পরিবর্তন সঠিকভাবে অ্যাপ্লাই করা হবে।
  • Isolation: একাধিক ট্রানজেকশন একসাথে চললে, একটিও ট্রানজেকশন অন্যের পরিবর্তন দেখতে পাবে না যতক্ষণ না তা সম্পূর্ণ হয়।
  • Durability: একটি সফল ট্রানজেকশনের পর পরিবর্তনগুলো স্থায়ী হবে।

SQLAlchemy তে ট্রানজেকশন পরিচালনা:

SQLAlchemy তে, যখন আপনি Session ব্যবহার করেন, এটি ডেটাবেসে একটি ট্রানজেকশন চালু করে। commit(), rollback(), এবং close() মেথডগুলো ট্রানজেকশন সম্পন্ন বা বাতিল করতে ব্যবহৃত হয়।

ট্রানজেকশন উদাহরণ:

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

# Declarative Base তৈরি
Base = declarative_base()

# User মডেল তৈরি
class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    age = Column(Integer)

# ডেটাবেস ইঞ্জিন তৈরি
engine = create_engine('sqlite:///example.db', echo=True)

# সেশন তৈরি
Session = sessionmaker(bind=engine)
session = Session()

try:
    # নতুন ইউজার ইনসার্ট করা
    new_user = User(name="Alice", age=30)
    session.add(new_user)
    
    # ট্রানজেকশন কমিট করা
    session.commit()
    print("Transaction committed successfully!")
    
except Exception as e:
    # কোনো সমস্যা হলে রোলব্যাক করা
    session.rollback()
    print(f"Transaction failed: {e}")
finally:
    # সেশন বন্ধ করা
    session.close()

এখানে, যদি new_user ইনসার্ট করার সময় কোনো সমস্যা হয়, তাহলে rollback() মেথডটি ডেটাবেসের সকল পরিবর্তন ফিরিয়ে আনবে এবং ট্রানজেকশন বাতিল হবে। যদি সবকিছু সঠিকভাবে চলে, তবে commit() মেথডটি সমস্ত পরিবর্তন স্থায়ীভাবে ডেটাবেসে সেভ করবে।


Nested Transactions

Nested Transactions একটি উন্নত ফিচার, যেখানে এক ট্রানজেকশন অন্য ট্রানজেকশনের মধ্যে অবস্থিত হতে পারে। অর্থাৎ, আপনি একাধিক সাব-ট্রানজেকশন তৈরি করতে পারেন যা মূল ট্রানজেকশনের অংশ হিসেবে কাজ করবে।

SQLAlchemy তে SAVEPOINT ব্যবহার করে Nested Transactions তৈরি করা যায়। SAVEPOINT একটি পয়েন্ট চিহ্নিত করে, যেখানে আপনি একটি সাব-ট্রানজেকশন তৈরি করতে পারবেন, এবং যদি কোনো সমস্যা হয়, তাহলে আপনি সেই সাব-ট্রানজেকশনটি রোলব্যাক করতে পারবেন, কিন্তু মূল ট্রানজেকশন অপরিবর্তিত থাকবে।

Nested Transactions উদাহরণ:

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

# Declarative Base তৈরি
Base = declarative_base()

# User মডেল তৈরি
class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    age = Column(Integer)

# ডেটাবেস ইঞ্জিন তৈরি
engine = create_engine('sqlite:///example.db', echo=True)

# সেশন তৈরি
Session = sessionmaker(bind=engine)
session = Session()

try:
    # প্রধান ট্রানজেকশন শুরু
    session.begin()
    
    # সাব-ট্রানজেকশন শুরু (SAVEPOINT)
    session.begin_nested()
    
    # নতুন ইউজার ইনসার্ট
    new_user = User(name="Bob", age=25)
    session.add(new_user)
    
    # সাব-ট্রানজেকশন কমিট
    session.commit()  # শুধুমাত্র সাব-ট্রানজেকশন

    # যদি কিছু ভুল হয়ে যায়, তাহলে রোলব্যাক করা যাবে
    # session.rollback() - মূল ট্রানজেকশন এর আগে চলে যাবে
    
    # প্রধান ট্রানজেকশন কমিট
    session.commit()
    print("Transaction committed successfully!")

except Exception as e:
    # যদি কোনো সমস্যা হয়, সব কিছু রোলব্যাক করা
    session.rollback()
    print(f"Transaction failed: {e}")
finally:
    session.close()

এখানে, session.begin_nested() একটি সাব-ট্রানজেকশন শুরু করে এবং session.commit() শুধুমাত্র সেই সাব-ট্রানজেকশন কমিট করে। যদি সাব-ট্রানজেকশনের মধ্যে কোনো সমস্যা হয়, তাহলে session.rollback() ব্যবহার করে সেটি রোলব্যাক করা যাবে, এবং মূল ট্রানজেকশন অক্ষত থাকবে।


Transaction Management এর সুবিধা

  • Atomicity: একাধিক SQL অপারেশনকে একটি একক ট্রানজেকশন হিসেবে পরিচালনা করা হয়, যা ডেটাবেসের ইন্টেগ্রিটি বজায় রাখে।
  • Error Handling: কোনো অপারেশন ব্যর্থ হলে, পুরো ট্রানজেকশন রোলব্যাক করে সব পরিবর্তন বাতিল করা যায়।
  • Performance: ট্রানজেকশন ব্যবহার করে ডেটাবেসের মধ্যে একাধিক অপারেশন দ্রুত এবং সুরক্ষিতভাবে করা যায়।
  • Nested Transactions: একটি ট্রানজেকশনকে বিভিন্ন সাব-ট্রানজেকশনে বিভক্ত করা, যাতে আপনি ছোট ছোট অংশে কাজ করতে পারেন।

সারাংশ

Transaction Management SQLAlchemy তে একটি অত্যন্ত গুরুত্বপূর্ণ পদ্ধতি যা ডেটাবেসে একাধিক SQL অপারেশনকে একত্রে কার্যকর করে। Nested Transactions ডেটাবেসে আরও উন্নত ট্রানজেকশন পরিচালনার সুযোগ দেয়, যেখানে একটি ট্রানজেকশন অন্য ট্রানজেকশনের মধ্যে থাকে। SQLAlchemy তে commit(), rollback(), এবং begin() মেথডগুলি ব্যবহারের মাধ্যমে ট্রানজেকশন শুরু, সম্পন্ন এবং বাতিল করা হয়, যা ডেটাবেসের কার্যক্রম পরিচালনায় সহায়তা করে।

Content added By
Promotion

Are you sure to start over?

Loading...