SQLAlchemy তে AND, OR, এবং NOT হল SQL কিউরির মধ্যে লজিক্যাল অপারেটর, যা ডেটাবেস থেকে আরও জটিল ডেটা filter বা query করতে ব্যবহৃত হয়। এই অপারেটরগুলোর মাধ্যমে আপনি একাধিক শর্ত যোগ করে ডেটা fetch করতে পারেন।
এখানে AND, OR, এবং NOT অপারেটরের ব্যবহার SQLAlchemy ORM এবং Core উভয় পদ্ধতিতে আলোচনা করা হবে।
AND Operator
AND অপারেটর ব্যবহার করে একাধিক শর্ত একসাথে প্রয়োগ করা হয়। সমস্ত শর্ত True হলে তখনই রেকর্ডটি নির্বাচিত হবে। SQLAlchemy তে AND অপারেটর ব্যবহার করার জন্য আপনি একাধিক filter() মেথড একসাথে ব্যবহার করতে পারেন অথবা and_() ফাংশন ব্যবহার করতে পারেন।
উদাহরণ (AND):
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import and_
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)
# টেবিল তৈরি
Base.metadata.create_all(engine)
# সেশন তৈরি
Session = sessionmaker(bind=engine)
session = Session()
# AND অপারেটর ব্যবহার
users = session.query(User).filter(and_(User.age > 25, User.name == "Alice")).all()
for user in users:
print(user.name, user.age)
এখানে, and_() ফাংশন ব্যবহার করে age > 25 এবং name == "Alice" শর্ত একসাথে প্রয়োগ করা হয়েছে। এই শর্ত দুটি একসাথে পূর্ণ হলে সেই রেকর্ড নির্বাচিত হবে।
OR Operator
OR অপারেটর ব্যবহার করলে যদি কোনো একটি শর্ত True হয়, তবে রেকর্ডটি নির্বাচিত হবে। SQLAlchemy তে OR অপারেটর ব্যবহার করতে or_() ফাংশন ব্যবহার করা হয়।
উদাহরণ (OR):
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import or_
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)
# টেবিল তৈরি
Base.metadata.create_all(engine)
# সেশন তৈরি
Session = sessionmaker(bind=engine)
session = Session()
# OR অপারেটর ব্যবহার
users = session.query(User).filter(or_(User.age < 20, User.name == "Alice")).all()
for user in users:
print(user.name, user.age)
এখানে, or_() ফাংশন ব্যবহার করে age < 20 অথবা name == "Alice" শর্তের যেকোনো একটি শর্ত সত্য হলে রেকর্ডটি নির্বাচিত হবে।
NOT Operator
NOT অপারেটর একটি শর্তের বিপরীত প্রয়োগ করে। SQLAlchemy তে NOT অপারেটর ব্যবহার করতে not_() ফাংশন ব্যবহার করা হয়। এটি কোন শর্তের বিপরীতে কাজ করে এবং তখনই রেকর্ড নির্বাচিত হয় যখন শর্তটি মিথ্যা হয়।
উদাহরণ (NOT):
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import not_
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)
# টেবিল তৈরি
Base.metadata.create_all(engine)
# সেশন তৈরি
Session = sessionmaker(bind=engine)
session = Session()
# NOT অপারেটর ব্যবহার
users = session.query(User).filter(not_(User.name == "Alice")).all()
for user in users:
print(user.name, user.age)
এখানে, not_() ফাংশন ব্যবহার করে name != "Alice" শর্ত দেওয়া হয়েছে, অর্থাৎ যেসব ইউজারের নাম Alice নয়, তারা নির্বাচিত হবে।
Complex Queries Combining AND, OR, and NOT
SQLAlchemy তে আপনি একাধিক AND, OR, এবং NOT অপারেটর একসাথে ব্যবহার করে আরও জটিল কুয়েরি তৈরি করতে পারেন। নিচে একটি উদাহরণ দেওয়া হলো যেখানে তিনটি অপারেটর একত্রে ব্যবহৃত হয়েছে।
উদাহরণ (Complex Query):
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import and_, or_, not_
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)
# টেবিল তৈরি
Base.metadata.create_all(engine)
# সেশন তৈরি
Session = sessionmaker(bind=engine)
session = Session()
# Complex Query ব্যবহার
users = session.query(User).filter(
and_(
or_(User.age < 30, User.name == "Alice"),
not_(User.name == "Bob")
)
).all()
for user in users:
print(user.name, user.age)
এখানে, or_() এবং not_() এর সাথে AND অপারেটর ব্যবহার করা হয়েছে। কুয়েরি এই শর্তগুলো অনুসরণ করবে:
age < 30অথবাname == "Alice", এবংname != "Bob"
এভাবে একাধিক লজিক্যাল অপারেটর দিয়ে আরও জটিল কুয়েরি তৈরি করা সম্ভব।
সারাংশ
SQLAlchemy তে AND, OR, এবং NOT অপারেটর ব্যবহার করে আপনি বিভিন্ন শর্তের উপর ভিত্তি করে ডেটাবেস থেকে প্রয়োজনীয় ডেটা filter বা fetch করতে পারেন। AND অপারেটর দিয়ে একাধিক শর্ত প্রয়োগ, OR দিয়ে যেকোনো একটি শর্ত পূর্ণ হলে নির্বাচন এবং NOT দিয়ে শর্তের বিপরীত প্রয়োগ করা সম্ভব। SQLAlchemy এই অপারেটরগুলির মাধ্যমে ডেটাবেস অপারেশনকে আরও শক্তিশালী এবং নমনীয় করে তোলে।
Read more