SQLAlchemy তে Data Manipulation বা CRUD (Create, Read, Update, Delete) অপারেশন অত্যন্ত গুরুত্বপূর্ণ। ORM (Object Relational Mapping) ব্যবহারের মাধ্যমে, SQLAlchemy আপনাকে ডেটাবেসে এই অপারেশনগুলো সহজে পরিচালনা করতে সাহায্য করে, যেখানে Python কোডের মাধ্যমে ডেটাবেস টেবিলের রেকর্ড ম্যানিপুলেট করা যায়।
এখানে Create, Read, Update, এবং Delete অপারেশন SQLAlchemy ORM এর মাধ্যমে কিভাবে করা যায়, তা নিয়ে বিস্তারিত আলোচনা করা হলো।
Create (ডেটা তৈরি করা)
SQLAlchemy তে ডেটা তৈরি করতে হলে প্রথমে একটি Model অবজেক্ট তৈরি করতে হয় এবং সেই অবজেক্টটি সেশন এর মাধ্যমে ডেটাবেসে সেভ করা হয়।
উদাহরণ:
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)
# SQLite ডেটাবেসে সংযোগ
engine = create_engine('sqlite:///example.db', echo=True)
# Session তৈরি
Session = sessionmaker(bind=engine)
session = Session()
# নতুন ইউজার তৈরি
new_user = User(name="Alice", age=30)
# সেশন দিয়ে ডেটাবেসে ইনসার্ট করা
session.add(new_user)
session.commit() # পরিবর্তন ডেটাবেসে সেভ
# সেশন বন্ধ করা
session.close()
এখানে, একটি নতুন User অবজেক্ট তৈরি করা হয়েছে এবং সেশন ব্যবহার করে add() মেথডের মাধ্যমে এটি ডেটাবেসে ইনসার্ট করা হয়েছে। commit() মেথডের মাধ্যমে পরিবর্তন ডেটাবেসে সেভ করা হয়েছে।
Read (ডেটা পড়া)
SQLAlchemy তে ডেটাবেস থেকে ডেটা রিড (পড়া) করার জন্য query() মেথড ব্যবহার করা হয়। এটি ORM মডেলের সাথে কাজ করে ডেটাবেস থেকে রেকর্ড ফেচ (fetch) করে।
উদাহরণ:
# Session তৈরি
session = Session()
# সব ইউজার রিড করা
users = session.query(User).all()
# রেকর্ড প্রিন্ট করা
for user in users:
print(user.name, user.age)
# সেশন বন্ধ করা
session.close()
এখানে, session.query(User).all() ব্যবহার করে users টেবিলের সমস্ত রেকর্ড ফেচ করা হয়েছে এবং তারপর for লুপের মাধ্যমে ডেটা প্রিন্ট করা হয়েছে।
Update (ডেটা আপডেট করা)
SQLAlchemy তে ডেটা আপডেট করতে হলে প্রথমে সংশ্লিষ্ট রেকর্ডকে খুঁজে বের করতে হয় এবং তারপর সেই রেকর্ডে নতুন মান অ্যাসাইন করে commit() মেথডের মাধ্যমে ডেটাবেসে পরিবর্তন সেভ করতে হয়।
উদাহরণ:
# Session তৈরি
session = Session()
# ইউজার খোঁজা (id=1)
user = session.query(User).filter_by(id=1).first()
# ইউজারের নাম পরিবর্তন করা
if user:
user.name = "Bob"
session.commit() # পরিবর্তন ডেটাবেসে সেভ
# সেশন বন্ধ করা
session.close()
এখানে, session.query(User).filter_by(id=1).first() এর মাধ্যমে id=1 ইউজার খুঁজে বের করা হয়েছে এবং তারপর তার name পরিবর্তন করে session.commit() মেথডের মাধ্যমে সেভ করা হয়েছে।
Delete (ডেটা মুছে ফেলা)
SQLAlchemy তে ডেটা মুছে ফেলার জন্য, প্রথমে সংশ্লিষ্ট রেকর্ডকে খুঁজে বের করতে হয় এবং তারপর delete() মেথড ব্যবহার করে সেশন থেকে মুছে ফেলতে হয়।
উদাহরণ:
# Session তৈরি
session = Session()
# ইউজার খোঁজা (id=1)
user = session.query(User).filter_by(id=1).first()
# ইউজার মুছে ফেলা
if user:
session.delete(user) # ডিলিট করা
session.commit() # পরিবর্তন ডেটাবেসে সেভ
# সেশন বন্ধ করা
session.close()
এখানে, session.query(User).filter_by(id=1).first() এর মাধ্যমে id=1 ইউজার খুঁজে বের করা হয়েছে এবং তারপর session.delete(user) ব্যবহার করে সেই ইউজার মুছে ফেলা হয়েছে। session.commit() এর মাধ্যমে পরিবর্তন ডেটাবেসে সেভ করা হয়েছে।
সারাংশ
SQLAlchemy তে CRUD (Create, Read, Update, Delete) অপারেশনগুলো খুবই সহজ এবং কার্যকরভাবে করা যায়। Create অপারেশন একটি নতুন অবজেক্ট তৈরি করে এবং তা ডেটাবেসে সেভ করে, Read অপারেশন ডেটাবেস থেকে ডেটা ফেচ করে, Update অপারেশন কোনো রেকর্ডের মান পরিবর্তন করে এবং Delete অপারেশন একটি রেকর্ড মুছে ফেলে। SQLAlchemy ORM এই সকল অপারেশনকে Python কোডের মাধ্যমে সহজ করে তোলে, যা ডেটাবেস ব্যবস্থাপনার কাজকে অনেক দ্রুত এবং কার্যকর করে।
SQLAlchemy তে Declarative Base একটি বিশেষ কৌশল, যা ডেটাবেস টেবিলগুলির সাথে Python ক্লাসগুলিকে সংযুক্ত করতে ব্যবহৃত হয়। এটি ORM (Object Relational Mapping) এর একটি গুরুত্বপূর্ণ অংশ এবং SQLAlchemy এর ORM ব্যবহারে সাধারণত ব্যবহৃত হয়। Declarative Base ক্লাসের মাধ্যমে আপনি Python ক্লাসগুলোকে ডেটাবেস টেবিলের সাথে ম্যাপ করতে পারেন, যা টেবিলের কাঠামো (schema) এবং সম্পর্ক (relationship) সংজ্ঞায়িত করে।
Declarative Base এর সাহায্যে ক্লাসগুলো সহজে তৈরি করা যায় এবং সেগুলোকে ডেটাবেস টেবিল হিসেবে ব্যবহার করা যায়।
Declarative Base এর ধারণা
Declarative Base একটি ক্লাস যা SQLAlchemy এর Base অবজেক্ট থেকে ইনহেরিট করা হয় এবং এটি class-based টেবিল ম্যাপিং পদ্ধতি সরবরাহ করে। এর মাধ্যমে, Python ক্লাসকে সরাসরি ডেটাবেস টেবিলের সাথে যুক্ত করা সম্ভব হয়। যখন ক্লাসটি Base থেকে ইনহেরিট করে, তখন ক্লাসের অ্যাট্রিবিউটগুলি টেবিলের কলাম হিসাবে আচরণ করতে শুরু করে।
Declarative Base কিভাবে কাজ করে?
- Base ক্লাস তৈরি করা: প্রথমে,
declarative_base()ফাংশন ব্যবহার করে একটিBaseক্লাস তৈরি করতে হয়। - Python ক্লাস তৈরি করা: তারপর, আপনি আপনার Python ক্লাস তৈরি করেন এবং তাকে
Baseথেকে ইনহেরিট করেন। - টেবিলের কাঠামো সংজ্ঞায়িত করা: Python ক্লাসে কলামগুলো সংজ্ঞায়িত করতে
Columnব্যবহার করা হয়, যেখানে প্রতিটি কলামের নাম, ডেটা টাইপ এবং অন্যান্য বৈশিষ্ট্য (যেমনprimary_key=True,nullable=Falseইত্যাদি) দেওয়া হয়। - ডেটাবেসে টেবিল তৈরি করা: পরে,
Base.metadata.create_all()মেথড ব্যবহার করে ডেটাবেসে টেবিল তৈরি করা হয়।
Declarative Base উদাহরণ
ধরা যাক, আমরা একটি User নামক টেবিল তৈরি করতে চাই, যার মধ্যে id, name, এবং age কলাম থাকবে। নিচে SQLAlchemy তে Declarative Base ব্যবহার করে কীভাবে কাজ করা যায় তা দেখানো হল:
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
# Declarative Base তৈরি করা
Base = declarative_base()
# Python ক্লাস তৈরি করা, যা টেবিলের সাথে ম্যাপ হবে
class User(Base):
__tablename__ = 'users' # টেবিলের নাম
id = Column(Integer, primary_key=True) # প্রাথমিক কী
name = Column(String) # নাম কলাম
age = Column(Integer) # বয়স কলাম
# SQLite ডেটাবেসের জন্য ইঞ্জিন তৈরি
engine = create_engine('sqlite:///example.db', echo=True)
# টেবিল তৈরি করা
Base.metadata.create_all(engine)
# Session তৈরি
Session = sessionmaker(bind=engine)
session = Session()
# নতুন ইউজার ইনসার্ট করা
new_user = User(name="Alice", age=30)
session.add(new_user)
session.commit()
# ইউজার রিড করা
users = session.query(User).all()
for user in users:
print(user.name, user.age)
# সেশন বন্ধ করা
session.close()
এখানে:
Baseক্লাস:declarative_base()ফাংশন দিয়ে একটিBaseক্লাস তৈরি করা হয়েছে।Userক্লাস:Userনামক Python ক্লাস তৈরি করা হয়েছে, যাBaseক্লাস থেকে ইনহেরিট করে। এই ক্লাসের মাধ্যমেusersটেবিলের কাঠামো এবং কলাম সংজ্ঞায়িত করা হয়েছে।- টেবিল তৈরি:
Base.metadata.create_all(engine)এর মাধ্যমে ডেটাবেসেusersটেবিল তৈরি করা হয়েছে। - ডেটা ম্যানিপুলেশন: Session ব্যবহার করে নতুন ইউজার ইনসার্ট করা হয়েছে এবং সব ইউজার রিড করা হয়েছে।
Declarative Base এর সুবিধা
- সহজ এবং পরিষ্কার কোড: Declarative Base ব্যবহারে কোড লেখা সহজ এবং পরিষ্কার হয়, কারণ এতে ক্লাসের মাধ্যমে টেবিল এবং কলাম সংজ্ঞায়িত করা হয়।
- ORM পদ্ধতির সাথে সংযুক্তি: ORM ব্যবহার করতে হলে
Declarative Baseএকটি শক্তিশালী এবং নির্ভরযোগ্য পদ্ধতি সরবরাহ করে। - এটি টেবিল ও ক্লাসের মধ্যে একটি সোজাসুজি সম্পর্ক স্থাপন করে, যা ডেটাবেস অপারেশনগুলোকে অবজেক্ট-ওরিয়েন্টেড পদ্ধতিতে করতে সাহায্য করে।
Declarative Base এবং Table অবজেক্টের পার্থক্য
| বিষয় | Declarative Base | Table অবজেক্ট |
|---|---|---|
| ব্যবহার | Python ক্লাসকে টেবিলের সাথে সংযুক্ত করার জন্য | SQLAlchemy Core এর মাধ্যমে সরাসরি টেবিল কাঠামো তৈরি |
| ম্যাপিং পদ্ধতি | ক্লাস থেকে টেবিল তৈরি এবং Column ডিফাইন করা | টেবিল এবং কলাম সংজ্ঞায়িত করা হয়। |
| টেবিলের কাঠামো | Python ক্লাসের মাধ্যমে | MetaData এবং Table অবজেক্টের মাধ্যমে |
| টেবিল সম্পর্ক | Base থেকে ইনহেরিট করা হয় | Table অবজেক্টের মাধ্যমে সম্পর্ক নির্ধারণ করা হয় |
সারাংশ
Declarative Base SQLAlchemy ORM ব্যবহারে একটি শক্তিশালী এবং সুবিধাজনক পদ্ধতি। এটি Python ক্লাস এবং ডেটাবেস টেবিলের মধ্যে সম্পর্ক স্থাপন করতে সাহায্য করে। Base থেকে ইনহেরিট করা ক্লাসের মাধ্যমে টেবিলের কাঠামো সহজেই সংজ্ঞায়িত করা যায়, যা ডেটাবেস ম্যানিপুলেশনকে আরো পরিষ্কার এবং কার্যকর করে তোলে। SQLAlchemy ORM এর মাধ্যমে Declarative Base পদ্ধতি ডেটাবেস টেবিল ও তাদের সম্পর্কের জন্য একটি রিডেবল এবং পরিষ্কার সমাধান প্রদান করে।
Declarative Mapping SQLAlchemy ORM এর একটি বিশেষ পদ্ধতি, যা Python ক্লাস এবং ডেটাবেস টেবিলের মধ্যে সম্পর্ক স্থাপন করে। এই পদ্ধতিতে আমরা ডেটাবেস টেবিলের কাঠামো Python ক্লাসের মাধ্যমে মডেল করি, এবং SQLAlchemy আমাদের ক্লাসকে ডেটাবেসের টেবিলের সাথে ম্যাপ করে। এটি ORM ব্যবহারের অন্যতম সুবিধা, কারণ এটি ডেটাবেসের সাথে সম্পর্কিত কোড লেখাকে সহজ এবং পরিষ্কার করে তোলে।
SQLAlchemy তে Declarative Base ব্যবহার করে ডেটাবেস টেবিল এবং Python ক্লাসের মধ্যে একটি সহজ এবং কার্যকর ম্যাপিং তৈরি করা যায়।
Declarative Mapping কী?
Declarative Mapping SQLAlchemy তে একটি পদ্ধতি, যা Python ক্লাসকে ডেটাবেস টেবিলের সাথে ম্যাপ করে। এটি SQLAlchemy ORM এর মাধ্যমে Object Relational Mapping (ORM) এর সহজ পদ্ধতি। এই পদ্ধতিতে, Python ক্লাস এবং ডেটাবেস টেবিলের কলামগুলোর মধ্যে সম্পর্ক সহজভাবে স্থাপন করা যায়।
Declarative Base তৈরি করা
Declarative Mapping ব্যবহারের জন্য প্রথমে declarative_base() ফাংশনটি ব্যবহার করে একটি Base ক্লাস তৈরি করতে হয়। এই ক্লাসটি সমস্ত মডেল ক্লাসের জন্য ভিত্তি হিসেবে কাজ করে। আপনার মডেল ক্লাসগুলো এই Base ক্লাস থেকে ইনহেরিট করবে।
উদাহরণ:
from sqlalchemy.ext.declarative import declarative_base
# Declarative Base তৈরি
Base = declarative_base()
এখানে Base একটি ক্লাস, যা সমস্ত মডেল ক্লাসের জন্য মাদার ক্লাস হিসেবে কাজ করবে।
মডেল তৈরি করা
Declarative Mapping পদ্ধতি ব্যবহার করে ডেটাবেস টেবিলের জন্য মডেল তৈরি করা হয়। মডেল ক্লাসের মধ্যে আপনি টেবিলের নাম এবং কলাম সংজ্ঞা দেন। প্রতিটি ক্লাসের ক্ষেত্রে একটি টেবিল এবং তার কলাম ডিফাইন করা হয়।
উদাহরণ:
from sqlalchemy import Column, Integer, String
# User মডেল তৈরি
class User(Base):
__tablename__ = 'users' # টেবিলের নাম
id = Column(Integer, primary_key=True) # প্রাথমিক কী
name = Column(String)
age = Column(Integer)
এখানে User একটি Python ক্লাস যা users টেবিলের প্রতিনিধিত্ব করছে। id, name, এবং age কলামগুলো এই টেবিলের ক্ষেত্রগুলো।
মডেল ব্যবহার করে টেবিল তৈরি করা
ডেটাবেসে টেবিল তৈরি করার জন্য Base.metadata.create_all() মেথড ব্যবহার করা হয়। এটি সমস্ত মডেল ক্লাসের জন্য টেবিলগুলো ডেটাবেসে তৈরি করে।
উদাহরণ:
from sqlalchemy import create_engine
# ডেটাবেস ইঞ্জিন তৈরি
engine = create_engine('sqlite:///example.db', echo=True)
# টেবিল তৈরি
Base.metadata.create_all(engine)
এখানে, create_all(engine) মেথডটি User মডেলের ভিত্তিতে ডেটাবেসে টেবিল তৈরি করবে।
মডেল ব্যবহার করে ডেটা ম্যানিপুলেশন
Declarative Mapping ব্যবহার করে তৈরি করা মডেল ক্লাসের মাধ্যমে ডেটাবেসে CRUD (Create, Read, Update, Delete) অপারেশন করা সহজ। এখানে Session ব্যবহার করে ডেটা ইনসার্ট, আপডেট এবং রিড করা হয়।
উদাহরণ:
from sqlalchemy.orm import sessionmaker
# সেশন তৈরি
Session = sessionmaker(bind=engine)
session = Session()
# নতুন ইউজার ইনসার্ট
new_user = User(name="Alice", age=25)
session.add(new_user)
session.commit() # ডেটাবেসে সেভ
# ডেটা রিড করা
users = session.query(User).all()
for user in users:
print(user.name, user.age)
# সেশন বন্ধ করা
session.close()
এখানে, session.add(new_user) ব্যবহার করে নতুন ইউজার ইনসার্ট করা হয়েছে এবং session.query(User).all() ব্যবহার করে সমস্ত ইউজার রিড করা হয়েছে।
Declarative Mapping এর সুবিধা
- সহজ এবং পরিষ্কার কোড: Declarative Mapping ব্যবহারে মডেল ক্লাসের মাধ্যমে ডেটাবেসের কাঠামো সহজে নির্ধারণ করা যায়।
- ওবজেক্ট-ওরিয়েন্টেড পদ্ধতি: Python অবজেক্ট ব্যবহার করে ডেটাবেসের সাথে কাজ করা সম্ভব হয়, যা ডেভেলপারদের জন্য খুবই সুবিধাজনক।
- ডেটাবেস পরিবর্তনের সহজ সমাধান: ডেটাবেস স্কিমায় পরিবর্তন করার জন্য ক্লাসের মধ্যে পরিবর্তন করলেই হয়ে যায়, এতে কোড লেখা সহজ হয়ে যায়।
সারাংশ
Declarative Mapping SQLAlchemy ORM এর মাধ্যমে ডেটাবেস টেবিল এবং Python ক্লাসের মধ্যে একটি কার্যকর সম্পর্ক স্থাপন করে। declarative_base() ফাংশন ব্যবহার করে Base ক্লাস তৈরি করা হয়, যা থেকে সব মডেল ক্লাস ইনহেরিট করে। এর মাধ্যমে আপনি ডেটাবেসের টেবিল, কলাম, এবং সম্পর্ক মডেল করতে পারবেন এবং সরাসরি Python অবজেক্ট ব্যবহার করে ডেটাবেস ম্যানিপুলেশন করতে পারবেন।
SQLAlchemy তে Attributes এবং Columns ডেটাবেস টেবিলের জন্য গুরুত্বপূর্ণ উপাদান। Attributes হল Python ক্লাসের বৈশিষ্ট্য (এটি একটি সাধারণ প্রোপার্টি), এবং Columns হল SQLAlchemy টেবিলের কাঠামোর জন্য কলাম। Attributes এবং Columns একে অপরের সাথে সংযুক্ত থাকে এবং ORM (Object Relational Mapping) প্রক্রিয়ার মাধ্যমে ডেটাবেসের টেবিল রেকর্ডগুলোকে Python অবজেক্টে রূপান্তরিত করা হয়।
Columns
SQLAlchemy তে, Column হলো টেবিলের একটি ক্ষেত্র, যেখানে ডেটা সংরক্ষিত হয়। প্রতিটি Column একটি নির্দিষ্ট ডেটা টাইপ ধারণ করে, যেমন Integer, String, Float, Date ইত্যাদি। একটি টেবিল তৈরি করার সময়, আপনি একাধিক Column সংজ্ঞায়িত করেন, এবং প্রতিটি Column টেবিলের একটি ক্ষেত্রের প্রতিনিধিত্ব করে।
Column এর বৈশিষ্ট্য:
- name: কলামের নাম
- type: কলামের ডেটা টাইপ
- primary_key: প্রাথমিক কী নির্দেশ করতে ব্যবহৃত হয়
- nullable: ডিফল্টভাবে কলামটি নাল (NULL) হতে পারবে কিনা
- unique: কলামটি ইউনিক হওয়া উচিত কিনা
উদাহরণ:
from sqlalchemy import create_engine, Column, Integer, String, MetaData, Table
# Metadata অবজেক্ট তৈরি
metadata = MetaData()
# Table অবজেক্ট তৈরি
users_table = Table('users', metadata,
Column('id', Integer, primary_key=True), # id কলাম (primary key)
Column('name', String), # name কলাম (String টাইপ)
Column('age', Integer) # age কলাম (Integer টাইপ)
)
# ইঞ্জিন তৈরি
engine = create_engine('sqlite:///example.db', echo=True)
# টেবিল তৈরি
metadata.create_all(engine)
এখানে, users_table এর মধ্যে id, name, এবং age কলাম রয়েছে। id কলামটি primary_key=True সেট করা হয়েছে, যার মাধ্যমে এটি টেবিলের প্রাথমিক কী হিসেবে কাজ করবে।
Attributes
Attributes হল Python ক্লাসের সাধারণ বৈশিষ্ট্য যা ক্লাসের অবজেক্টের মাধ্যমে অ্যাক্সেস করা যায়। SQLAlchemy তে, Attributes সাধারণত Column এর সাথে সংযুক্ত থাকে, যার মাধ্যমে ক্লাসের অভ্যন্তরে ডেটাবেস টেবিলের কলামের মান রাখা হয়।
SQLAlchemy ORM ব্যবহার করে, Attributes Python ক্লাসের বৈশিষ্ট্য হিসেবে কাজ করে, এবং এগুলোর মাধ্যমে আপনি ডেটাবেস টেবিলের রেকর্ডের সাথে ইন্টারঅ্যাক্ট করতে পারেন।
উদাহরণ:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
# Base ক্লাস তৈরি
Base = declarative_base()
# User ক্লাস তৈরি (Attributes এবং Columns সংযুক্ত করা)
class User(Base):
__tablename__ = 'users' # টেবিলের নাম
id = Column(Integer, primary_key=True) # Column হিসেবে id
name = Column(String) # Column হিসেবে name
age = Column(Integer) # Column হিসেবে age
# টেবিল তৈরি করার জন্য ইঞ্জিন তৈরি
engine = create_engine('sqlite:///example.db', echo=True)
# টেবিল তৈরি
Base.metadata.create_all(engine)
এখানে User ক্লাসের মধ্যে id, name, এবং age কলামগুলো রয়েছে, যা Attributes হিসেবে সংজ্ঞায়িত করা হয়েছে। এগুলোর সাথে SQLAlchemy Columns সংযুক্ত থাকে, যেগুলো টেবিলের কলামকে প্রতিনিধিত্ব করে। Attributes (যেমন name, age) ক্লাসের অবজেক্টের মাধ্যমে ডেটাবেস টেবিলের কলামের মানকে ধারণ করে।
Attributes এবং Columns সংযুক্ত করার প্রক্রিয়া
- Declarative Base ব্যবহারের মাধ্যমে, আপনি Attributes (Python ক্লাসের অ্যাট্রিবিউট) এবং Columns (SQLAlchemy টেবিলের কলাম) এর মধ্যে সম্পর্ক তৈরি করেন।
- Column টেবিলের এটি একটি ক্ষেত্র প্রতিনিধিত্ব করে, যা SQLAlchemy ORM দ্বারা Attributes হিসেবে ব্যবহৃত হয়।
- SQLAlchemy আপনার Python ক্লাস এবং SQL টেবিল এর মধ্যে সম্পর্ক তৈরি করে, যাতে Python অবজেক্টের মাধ্যমে ডেটাবেসের টেবিলের রেকর্ডের সাথে কাজ করা যায়।
Attributes এবং Columns এর মধ্যে সম্পর্ক
| Attributes | Columns |
|---|---|
| Python ক্লাসের বৈশিষ্ট্য | SQLAlchemy টেবিলের কলাম |
| ডেটাবেস রেকর্ডের মান ধারণ করে | টেবিলের ক্ষেত্রের মান ধারণ করে |
| অবজেক্ট-ওরিয়েন্টেড পদ্ধতিতে কাজ করে | ডেটাবেসের সাথে যোগাযোগ স্থাপন করে |
সারাংশ
SQLAlchemy তে Attributes এবং Columns খুব গুরুত্বপূর্ণ এবং সম্পর্কযুক্ত উপাদান। Attributes হল Python ক্লাসের বৈশিষ্ট্য যা Columns এর সাথে সংযুক্ত থাকে এবং ডেটাবেস টেবিলের ক্ষেত্রগুলোর প্রতিনিধিত্ব করে। SQLAlchemy ORM অবজেক্ট-ওরিয়েন্টেড পদ্ধতিতে ডেটাবেস ম্যানিপুলেশন করতে সাহায্য করে, যেখানে Attributes এবং Columns এর সম্পর্ক নিশ্চিত করে ডেটাবেস টেবিল এবং Python ক্লাসের মধ্যে একটি শক্তিশালী সংযোগ।
SQLAlchemy তে Primary Key, Foreign Key, এবং Constraints ডেটাবেস টেবিলের ডেটা সঠিকভাবে সংরক্ষণ, সম্পর্ক স্থাপন এবং সুরক্ষা নিশ্চিত করার জন্য ব্যবহৃত হয়। এগুলো ডেটাবেসের কাঠামোকে আরও সুশৃঙ্খল এবং কার্যকরী করে তোলে।
Primary Key
Primary Key (PK) হলো একটি টেবিলের এমন একটি কলাম বা কলাম সেট, যা টেবিলের প্রতিটি রেকর্ডের জন্য অনন্য (unique) এবং না-null (NOT NULL) হতে হবে। এটি একটি টেবিলের প্রতিটি রেকর্ডকে পৃথকভাবে চিহ্নিত করতে ব্যবহৃত হয়। সাধারণত, প্রাথমিক কী শুধুমাত্র একবারই টেবিলের মধ্যে থাকে এবং এটি ডেটাবেসের রেকর্ড সনাক্ত করার জন্য ব্যবহৃত হয়।
Primary Key এর বৈশিষ্ট্য:
- একটি টেবিলের প্রতিটি রেকর্ডের জন্য অনন্য হতে হবে।
- NULL মান গ্রহণ করতে পারে না।
- সাধারণত INTEGER অথবা UUID ডেটা টাইপে থাকে।
উদাহরণ:
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData
# Metadata অবজেক্ট তৈরি
metadata = MetaData()
# Table অবজেক্ট তৈরি
users = Table('users', metadata,
Column('id', Integer, primary_key=True), # Primary Key
Column('name', String),
Column('age', Integer))
# SQLite ডেটাবেসে টেবিল তৈরি
engine = create_engine('sqlite:///example.db', echo=True)
metadata.create_all(engine)
এখানে, id কলামটি Primary Key হিসেবে সংজ্ঞায়িত করা হয়েছে।
Foreign Key
Foreign Key (FK) একটি টেবিলের কলাম যা অন্য টেবিলের Primary Key বা Unique Key এর দিকে নির্দেশ করে। এটি দুইটি টেবিলের মধ্যে সম্পর্ক তৈরি করে, যেমন One-to-Many বা Many-to-Many। Foreign Key ডেটাবেসের একাধিক টেবিলের মধ্যে সম্পর্ক স্থাপন করে এবং ডেটা সঠিকতা (data integrity) বজায় রাখতে সহায়ক হয়।
Foreign Key এর বৈশিষ্ট্য:
- এটি অন্য টেবিলের একটি Primary Key বা Unique Key এর দিকে নির্দেশ করে।
- এটি NULL হতে পারে, কিন্তু সম্পর্কিত রেকর্ড যদি না থাকে তবে ত্রুটি (error) তৈরি হতে পারে।
- এটি টেবিলের মধ্যে সম্পর্ক সৃষ্টি করে, যেমন One-to-Many বা Many-to-Many।
উদাহরণ:
from sqlalchemy import create_engine, Table, Column, Integer, String, ForeignKey, MetaData
# Metadata অবজেক্ট তৈরি
metadata = MetaData()
# Parent টেবিল তৈরি (যেখানে Primary Key আছে)
users = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
Column('age', Integer))
# Child টেবিল তৈরি (যেখানে Foreign Key আছে)
posts = Table('posts', metadata,
Column('id', Integer, primary_key=True),
Column('user_id', Integer, ForeignKey('users.id')), # Foreign Key
Column('title', String))
# SQLite ডেটাবেসে টেবিল তৈরি
engine = create_engine('sqlite:///example.db', echo=True)
metadata.create_all(engine)
এখানে, posts টেবিলের user_id কলামটি users টেবিলের id কলামের দিকে Foreign Key হিসেবে নির্দেশ করে।
Constraints
Constraints হলো ডেটাবেসের টেবিলের কলামগুলোর জন্য সীমাবদ্ধতা যা ডেটার সঠিকতা, নির্ভরযোগ্যতা এবং নিরাপত্তা নিশ্চিত করে। SQLAlchemy তে কিছু সাধারণ কনস্ট্রেইন্ট রয়েছে, যেমন NOT NULL, UNIQUE, CHECK, এবং DEFAULT।
সাধারণ Constraints এর উদাহরণ:
- NOT NULL: কোনো কলামটি NULL হতে পারে না। এই কনস্ট্রেইন্ট ব্যবহার করে কলামের মান অবশ্যই প্রদান করতে হবে।
Column('name', String, nullable=False) # NOT NULL
- UNIQUE: একটি কলামের সমস্ত মান অনন্য (unique) হতে হবে। এটি ব্যবহার করে একটি কলামের মধ্যে ডুপ্লিকেট ভ্যালু রাখা যাবে না।
Column('email', String, unique=True) # UNIQUE constraint
- DEFAULT: কলামটির জন্য একটি ডিফল্ট মান সেট করা যায়, যদি ব্যবহারকারী কোনো মান না দেয়।
Column('age', Integer, default=18) # Default value for age
- CHECK: কলামের মানের উপর কিছু শর্ত আরোপ করা যায়। উদাহরণস্বরূপ, একটি age কলাম যাতে 0 বা তার বেশি হয়।
Column('age', Integer, CheckConstraint('age >= 0')) # CHECK constraint
উদাহরণ:
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData, ForeignKey
# Metadata অবজেক্ট তৈরি
metadata = MetaData()
# Table অবজেক্ট তৈরি
users = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String, nullable=False), # NOT NULL
Column('email', String, unique=True), # UNIQUE constraint
Column('age', Integer, default=18), # DEFAULT constraint
Column('salary', Integer, CheckConstraint('salary > 0')) # CHECK constraint
)
# SQLite ডেটাবেসে টেবিল তৈরি
engine = create_engine('sqlite:///example.db', echo=True)
metadata.create_all(engine)
এখানে:
nameকলামের জন্য NOT NULL কনস্ট্রেইন্ট ব্যবহার করা হয়েছে।emailকলামের জন্য UNIQUE কনস্ট্রেইন্ট ব্যবহার করা হয়েছে।salaryকলামের জন্য CHECK কনস্ট্রেইন্ট ব্যবহার করা হয়েছে।
সারাংশ
Primary Key, Foreign Key, এবং Constraints SQLAlchemy তে ডেটাবেস টেবিলের জন্য বিভিন্ন সুরক্ষা এবং কাঠামো তৈরি করতে ব্যবহৃত হয়। Primary Key ডেটাবেস টেবিলের প্রতিটি রেকর্ডকে অনন্যভাবে চিহ্নিত করে, Foreign Key ডেটাবেসের একাধিক টেবিলের মধ্যে সম্পর্ক স্থাপন করে এবং Constraints ডেটা সঠিকতা এবং নিরাপত্তা নিশ্চিত করতে সাহায্য করে। SQLAlchemy এই কনস্ট্রেইন্টগুলোর মাধ্যমে ডেটাবেস ম্যানিপুলেশনকে আরও শক্তিশালী এবং কার্যকর করে তোলে।
Read more