SQLAlchemy Core SQLAlchemy এর একটি কমপ্লেক্স অংশ, যা ডেটাবেস অপারেশন করার জন্য সরাসরি SQL স্টেটমেন্ট এবং এক্সপ্রেশন ব্যবহার করতে সহায়ক। এটি SQLAlchemy ORM এর তুলনায় আরো কম লেভেল ও ফ্লেক্সিবল এবং কাস্টম SQL কিউরি লেখার জন্য একটি শক্তিশালী টুল। SQLAlchemy Core মূলত ডেটাবেস টেবিল, কলাম, ইনডেক্স, কনস্ট্রেইন্ট এবং অন্যান্য স্কিমা উপাদানগুলোর জন্য কাঠামো তৈরি করতে ব্যবহৃত হয়।
SQLAlchemy Core এর মৌলিক ধারণা
SQLAlchemy Core মূলত দুটি প্রধান অংশে বিভক্ত:
- SQL Expression Language: কাস্টম SQL স্টেটমেন্ট তৈরি এবং ডেটাবেস অপারেশন পরিচালনার জন্য একটি উচ্চস্তরের ভাষা।
- MetaData এবং Table: ডেটাবেস টেবিল এবং তাদের কাঠামো সংজ্ঞায়িত এবং পরিচালনা করার জন্য।
Core তে SQLAlchemy ORM এর মতো অবজেক্ট-ওরিয়েন্টেড পদ্ধতি ব্যবহার করা হয় না, বরং সরাসরি SQL কিউরি লেখার মাধ্যমে ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করা হয়।
SQLAlchemy Core ব্যবহার করার জন্য প্রাথমিক পদক্ষেপ
- MetaData তৈরি করা:
MetaDataহল SQLAlchemy তে ডেটাবেসের স্কিমা সম্পর্কিত তথ্য ধারণ করার একটি অবজেক্ট। - Table তৈরি করা:
Tableঅবজেক্ট ব্যবহার করে ডেটাবেস টেবিলের কাঠামো তৈরি করা হয়। - Engine তৈরি করা:
Engineডেটাবেসের সাথে সংযোগ স্থাপন করতে ব্যবহৃত হয়।
SQLAlchemy Core উদাহরণ
ধরা যাক আমরা একটি users টেবিল তৈরি করতে চাই, যাতে id, name, এবং age কলাম থাকবে।
1. ডেটাবেস ইঞ্জিন তৈরি এবং সংযোগ স্থাপন
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
# ডেটাবেস ইঞ্জিন তৈরি
engine = create_engine('sqlite:///example.db', echo=True)
# Metadata অবজেক্ট তৈরি
metadata = MetaData()
# Table অবজেক্ট তৈরি
users_table = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
Column('age', Integer))
# টেবিল তৈরি
metadata.create_all(engine)
এখানে, আমরা একটি SQLite ডেটাবেস ইঞ্জিন তৈরি করেছি এবং users নামের একটি টেবিল তৈরি করেছি। create_all() মেথডটি ডেটাবেসে টেবিলটি বাস্তবায়িত (create) করবে।
SQLAlchemy Core তে ডেটা ইনসার্ট, আপডেট এবং ডিলিট করা
2. ডেটা ইনসার্ট করা
from sqlalchemy import insert
# ইনসার্ট কিউরি তৈরি করা
stmt = insert(users_table).values(name="Alice", age=25)
# ডেটাবেসে ইনসার্ট করা
with engine.connect() as connection:
connection.execute(stmt)
এখানে, insert() ব্যবহার করে users টেবিলে নতুন ডেটা ইনসার্ট করা হয়েছে।
3. ডেটা আপডেট করা
from sqlalchemy import update
# আপডেট কিউরি তৈরি করা
stmt = update(users_table).where(users_table.c.name == "Alice").values(age=26)
# ডেটাবেসে আপডেট করা
with engine.connect() as connection:
connection.execute(stmt)
এখানে, update() কিউরি ব্যবহার করে name কলামে "Alice" থাকা রেকর্ডের age পরিবর্তন করা হয়েছে।
4. ডেটা ডিলিট করা
from sqlalchemy import delete
# ডিলিট কিউরি তৈরি করা
stmt = delete(users_table).where(users_table.c.name == "Alice")
# ডেটাবেস থেকে ডিলিট করা
with engine.connect() as connection:
connection.execute(stmt)
এখানে, delete() কিউরি ব্যবহার করে name কলামে "Alice" থাকা রেকর্ড মুছে ফেলা হয়েছে।
SQLAlchemy Core তে ডেটা ফেচিং
5. ডেটা ফেচ করা
from sqlalchemy import select
# সিলেক্ট কিউরি তৈরি করা
stmt = select([users_table])
# ডেটাবেস থেকে ডেটা ফেচ করা
with engine.connect() as connection:
result = connection.execute(stmt)
for row in result:
print(row)
এখানে, select() ব্যবহার করে users_table থেকে সমস্ত রেকর্ড ফেচ করা হয়েছে।
SQLAlchemy Core তে কাস্টম SQL স্টেটমেন্ট
SQLAlchemy Core তে আপনি কাস্টম SQL স্টেটমেন্টও তৈরি করতে পারেন। উদাহরণস্বরূপ, একটি কাস্টম SELECT স্টেটমেন্ট:
# কাস্টম SQL স্টেটমেন্ট তৈরি করা
stmt = "SELECT * FROM users WHERE age > 20"
# ডেটাবেসে কাস্টম SQL স্টেটমেন্ট এক্সিকিউট করা
with engine.connect() as connection:
result = connection.execute(stmt)
for row in result:
print(row)
এখানে, SQLAlchemy সরাসরি কাস্টম SQL স্টেটমেন্টও কার্যকর করতে সহায়ক।
SQLAlchemy Core এর উপকারিতা
- ফ্লেক্সিবিলিটি: Core আপনাকে কাস্টম SQL কিউরি লেখার পূর্ণ স্বাধীনতা দেয়।
- ডেটাবেস অপ্টিমাইজেশন: সরাসরি SQL স্টেটমেন্ট ব্যবহার করে আপনি ডেটাবেস অপটিমাইজেশন করতে পারেন।
- কমপ্লেক্স কোয়েরি সাপোর্ট: আপনি SQLAlchemy Core দিয়ে জটিল SQL কিউরি এবং এক্সপ্রেশন তৈরি করতে পারেন।
সারাংশ
SQLAlchemy Core হল একটি কমপ্লেক্স এবং নমনীয় টুল, যা ডেটাবেস অপারেশন পরিচালনার জন্য সরাসরি SQL স্টেটমেন্ট ব্যবহারের সুযোগ দেয়। এটি আপনাকে ডেটাবেস টেবিলের কাঠামো তৈরি, ডেটা ইনসার্ট, আপডেট, ডিলিট, ফেচ এবং কাস্টম SQL স্টেটমেন্ট এক্সিকিউট করার ক্ষমতা প্রদান করে। SQLAlchemy Core ব্যবহার করলে আপনি অধিক নিয়ন্ত্রণ এবং ফ্লেক্সিবিলিটি পেতে পারেন, বিশেষ করে যখন আপনি ORM এর তুলনায় সরাসরি SQL কিউরি লেখার প্রয়োজন অনুভব করেন।
SQLAlchemy মূলত দুটি অংশে বিভক্ত: Core এবং ORM। উভয়েই ডেটাবেস ম্যানিপুলেশন করার জন্য ব্যবহৃত হয়, তবে তাদের কাজ করার পদ্ধতি এবং ব্যবহারের ধরনে পার্থক্য রয়েছে।
নিচে SQLAlchemy Core এবং ORM এর মধ্যে প্রধান পার্থক্য তুলে ধরা হলো:
1. পদ্ধতি এবং ব্যবহারের ধরন
- Core:
- SQLAlchemy Core সরাসরি SQL স্টেটমেন্ট এবং ডেটাবেসের সাথে যোগাযোগ করার জন্য ব্যবহৃত হয়।
- এটি SQL Expression Language ব্যবহার করে কাস্টম SQL কোয়েরি তৈরি এবং কার্যকর করতে সাহায্য করে।
- Core মূলত ডেটাবেসের টেবিল, কলাম এবং রেকর্ডের সাথে সোজাসুজি কাজ করে, কোন অবজেক্ট-ওরিয়েন্টেড পদ্ধতি নয়।
- ORM:
- SQLAlchemy ORM ডেটাবেস টেবিল এবং Python অবজেক্টের মধ্যে সম্পর্ক স্থাপন করে।
- ORM ডেটাবেসের রেকর্ডগুলোকে Python অবজেক্ট হিসেবে রিপ্রেজেন্ট করে এবং অবজেক্ট-ওরিয়েন্টেড পদ্ধতি ব্যবহার করে ডেটাবেসে CRUD অপারেশন সম্পাদন করে।
- ORM ডেটাবেসের টেবিলগুলিকে Python ক্লাসের মাধ্যমে ম্যাপ করে, যা ডেটাবেস ম্যানিপুলেশন সহজ করে তোলে।
2. SQL লেখার পদ্ধতি
Core:
- SQLAlchemy Core সরাসরি SQL স্টেটমেন্টের মাধ্যমে ডেটাবেসের সাথে যোগাযোগ করে।
- এটি SQL কিউরি তৈরি এবং ডেটাবেস অপারেশন পরিচালনার জন্য একটি কার্যকরী পদ্ধতি প্রদান করে, কিন্তু এতে Object-Relational Mapping নেই।
উদাহরণ:
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData # ইঞ্জিন তৈরি engine = create_engine('sqlite:///example.db', echo=True) # মেটাডেটা এবং টেবিল তৈরি metadata = MetaData() users = Table('users', metadata, Column('id', Integer, primary_key=True), Column('name', String), Column('age', Integer)) # টেবিল তৈরি metadata.create_all(engine) # টেবিল থেকে ডেটা ফেচ করা with engine.connect() as connection: result = connection.execute(users.select()) for row in result: print(row)ORM:
- ORM ডেটাবেসের রেকর্ডগুলোকে Python ক্লাসের অবজেক্ট হিসেবে উপস্থাপন করে, যার ফলে SQL কোড লিখার প্রয়োজন পড়ে না।
- এটি Query API ব্যবহার করে ডেটা রিড, ইনসার্ট, আপডেট, এবং ডিলিট অপারেশন পরিচালনা করতে সক্ষম।
উদাহরণ:
from sqlalchemy import create_engine, Column, Integer, String from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker # Base ক্লাস তৈরি Base = declarative_base() # মডেল তৈরি 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() # নতুন ইউজার ইনসার্ট করা 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()
3. ডেটাবেসের সাথে সম্পর্ক
- Core:
- Core শুধুমাত্র টেবিল এবং কলাম স্তরের ম্যানিপুলেশন পরিচালনা করে। এটি ডেটাবেস রেকর্ডের সাথে সম্পর্ক তৈরি বা পরিচালনা করে না।
ORM:
- ORM Relationships (One-to-One, One-to-Many, Many-to-Many) পরিচালনা করার জন্য বিশেষভাবে তৈরি করা হয়েছে। ORM এর মাধ্যমে আপনি ফরেন কী সম্পর্ক, একাধিক টেবিলের মধ্যে সম্পর্ক, এবং অবজেক্ট সম্পর্কিত সম্পর্ক সহজে পরিচালনা করতে পারেন।
উদাহরণ:
class Address(Base): __tablename__ = 'addresses' id = Column(Integer, primary_key=True) email_address = Column(String, nullable=False) user_id = Column(Integer, ForeignKey('users.id')) user = relationship("User", back_populates="addresses") User.addresses = relationship("Address", order_by=Address.id, back_populates="user")
4. ব্যবহারকারী পদ্ধতি
- Core:
- SQLAlchemy Core ব্যবহারের জন্য ডেটাবেসের সরাসরি কাঠামো এবং SQL স্টেটমেন্ট ব্যবহৃত হয়, যা কিছুটা প্রোগ্রামিং এর বেশি দক্ষতা এবং SQL লেখার দক্ষতা চায়।
- ORM:
- ORM অবজেক্ট-ওরিয়েন্টেড পদ্ধতিতে কাজ করে, যা Python ডেভেলপারদের জন্য সহজ এবং কম কোড লেখার সুযোগ দেয়। ডেটাবেসে CRUD অপারেশন অনেক সহজ হয়ে যায়, কারণ আপনাকে সরাসরি SQL কিউরি লেখার প্রয়োজন হয় না।
5. পারফরম্যান্স
- Core:
- SQLAlchemy Core সরাসরি SQL কিউরি তৈরি করে, তাই এটি অধিক কাস্টমাইজড এবং পারফরম্যান্সে দ্রুত হতে পারে।
- ORM:
- ORM কিছুটা কম পারফর্ম্যান্ট হতে পারে, কারণ এটি ডেটাবেস রেকর্ডকে অবজেক্টে রূপান্তর করতে সময় নেয়। তবে, Lazy Loading এবং Eager Loading কৌশলগুলো ব্যবহার করে পারফরম্যান্স বাড়ানো যেতে পারে।
সারাংশ
SQLAlchemy Core এবং ORM উভয়েরই ব্যবহার এবং লক্ষ্য আলাদা। Core সরাসরি SQL কিউরি এবং টেবিল কাঠামো ব্যবস্থাপনায় ব্যবহৃত হয়, যেখানে ORM অবজেক্ট-ওরিয়েন্টেড পদ্ধতিতে ডেটাবেস অপারেশন সম্পাদন করে, যা কোড লেখার সহজতর পদ্ধতি সরবরাহ করে। সাধারণত, Core বেশি কাস্টমাইজড এবং ORM সহজ ব্যবহারের জন্য ব্যবহৃত হয়।
SQLAlchemy তে Table তৈরি এবং মডিফিকেশন একটি গুরুত্বপূর্ণ কাজ, যেখানে ডেটাবেসের কাঠামো সংজ্ঞায়িত করা হয় এবং ডেটাবেসে টেবিল তৈরি বা পরিবর্তন করা হয়। SQLAlchemy তে Table এবং Column অবজেক্ট ব্যবহার করে আপনি টেবিল তৈরি এবং মডিফাই করতে পারেন।
Table তৈরি
SQLAlchemy তে টেবিল তৈরি করার জন্য MetaData এবং Table অবজেক্ট ব্যবহার করা হয়। MetaData একটি কন্টেইনার হিসেবে কাজ করে, যা টেবিল এবং তাদের কাঠামো ধারণ করে। একটি টেবিল তৈরি করতে Table অবজেক্ট ব্যবহার করা হয়, যেখানে টেবিলের নাম এবং কলামগুলো সংজ্ঞায়িত করা হয়।
Table তৈরি করার উদাহরণ:
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData
# MetaData অবজেক্ট তৈরি
metadata = MetaData()
# Table অবজেক্ট তৈরি
users = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
Column('age', Integer))
# SQLite ডেটাবেসে টেবিল তৈরি
engine = create_engine('sqlite:///example.db', echo=True)
metadata.create_all(engine)
এখানে users টেবিলটি id, name, এবং age কলাম সহ তৈরি করা হয়েছে। metadata.create_all(engine) ব্যবহার করে টেবিলটি ডেটাবেসে তৈরি করা হয়েছে।
Table মডিফিকেশন
একবার টেবিল তৈরি হলে, SQLAlchemy সরাসরি Table অবজেক্টের মাধ্যমে টেবিলের কাঠামো পরিবর্তন (মডিফাই) করতে দেয় না। তবে, আপনি Alembic নামক একটি মাইগ্রেশন টুল ব্যবহার করে টেবিলের কাঠামো মডিফাই করতে পারেন।
যদিও সরাসরি ALTER TABLE স্টেটমেন্ট ব্যবহার করে SQLAlchemy টেবিল মডিফাই করা সম্ভব, তবে Alembic একটি জনপ্রিয় পদ্ধতি যা মাইগ্রেশন পদ্ধতি সহজ এবং সুসংগঠিত করে।
Alembic ব্যবহার করে টেবিল মডিফিকেশন
Alembic ইনস্টল করা: প্রথমে, Alembic ইনস্টল করতে হবে:
pip install alembicAlembic কনফিগারেশন তৈরি: Alembic কনফিগারেশন শুরু করতে নিচের কমান্ডটি চালান:
alembic init alembicমাইগ্রেশন স্ক্রিপ্ট তৈরি করা: যদি আপনার মডেল পরিবর্তন হয়, যেমন একটি নতুন কলাম যুক্ত করা, তাহলে Alembic মাইগ্রেশন স্ক্রিপ্ট তৈরি করতে হবে:
alembic revision --autogenerate -m "add new column to users"মাইগ্রেশন চালানো: মাইগ্রেশন স্ক্রিপ্ট চালানোর জন্য:
alembic upgrade head
এভাবে, Alembic ব্যবহার করে টেবিলের কাঠামো পরিবর্তন এবং ডেটাবেস মাইগ্রেশন পরিচালনা করা যায়।
Column পরিবর্তন
SQLAlchemy তে একবার টেবিল তৈরি হলে, সরাসরি Column মডিফাই করা সম্ভব নয়, তবে কলাম যুক্ত বা মুছে ফেলা যেতে পারে:
কলাম যুক্ত করা:
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData
# Metadata এবং Table অবজেক্ট তৈরি
metadata = MetaData()
users = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
Column('age', Integer))
# SQLite ডেটাবেসে টেবিল তৈরি
engine = create_engine('sqlite:///example.db', echo=True)
metadata.create_all(engine)
# কলাম যুক্ত করা
new_column = Column('email', String)
users.append_column(new_column)
# কলাম যোগ করার পর টেবিল মডিফাই করা
metadata.create_all(engine)
কলাম মুছে ফেলা:
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData
# Metadata এবং Table অবজেক্ট তৈরি
metadata = MetaData()
users = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
Column('age', Integer))
# SQLite ডেটাবেসে টেবিল তৈরি
engine = create_engine('sqlite:///example.db', echo=True)
metadata.create_all(engine)
# কলাম মুছে ফেলা (যেমন 'age' কলাম)
users.c.age.drop()
# টেবিল মডিফাই করা
metadata.create_all(engine)
Table মডিফিকেশনের সীমাবদ্ধতা
SQLAlchemy তে টেবিলের কাঠামো পরিবর্তন করার কিছু সীমাবদ্ধতা রয়েছে। মূলত, একবার টেবিল তৈরি হলে আপনি ডাইনামিকভাবে তা পরিবর্তন করতে পারবেন না, এবং সাধারণত Alembic মাইগ্রেশন ব্যবহার করা হয়। SQLAlchemy নিজে টেবিলের জন্য সম্পূর্ণ ALTER কার্যকলাপ সরাসরি সাপোর্ট করে না।
সারাংশ
SQLAlchemy তে Table তৈরি এবং মডিফিকেশন করার জন্য MetaData এবং Table অবজেক্ট ব্যবহার করা হয়। টেবিল তৈরি এবং কলাম সংজ্ঞায়িত করতে Table ব্যবহার করা হয় এবং টেবিলের কাঠামো সংরক্ষণ করার জন্য Metadata ব্যবহৃত হয়। সরাসরি টেবিল মডিফিকেশন SQLAlchemy তে সীমাবদ্ধ, তবে Alembic ব্যবহার করে ডেটাবেস মাইগ্রেশন পরিচালনা করা হয়, যা টেবিলের কাঠামো পরিবর্তন করতে সাহায্য করে।
SQLAlchemy তে SQL Query Execute করার জন্য আপনি Engine বা Connection অবজেক্ট ব্যবহার করতে পারেন। SQLAlchemy Core এবং ORM উভয়ের জন্য SQL স্টেটমেন্ট (যেমন INSERT, SELECT, UPDATE, DELETE) পরিচালনা করার সুবিধা দেয়। এখানে Core পদ্ধতি ব্যবহার করে SQL কিউরি এক্সিকিউট করার উদাহরণ দেখানো হলো।
INSERT Query Execute করা
INSERT কিউরি ব্যবহার করে ডেটাবেসে নতুন ডেটা ইনসার্ট করা হয়। SQLAlchemy তে insert() ফাংশন ব্যবহার করে এটি করা যায়।
উদাহরণ (INSERT):
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData
# ডেটাবেস ইঞ্জিন তৈরি
engine = create_engine('sqlite:///example.db', echo=True)
# Metadata অবজেক্ট তৈরি
metadata = MetaData()
# টেবিল তৈরি
users = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
Column('age', Integer))
# টেবিল ডেটাবেসে তৈরি করা
metadata.create_all(engine)
# Connection তৈরি এবং INSERT অপারেশন
with engine.connect() as connection:
# INSERT কিউরি চালানো
insert_query = users.insert().values(name="John Doe", age=25)
connection.execute(insert_query)
এখানে insert().values() ব্যবহার করে টেবিল users-এ নতুন রেকর্ড ইনসার্ট করা হচ্ছে।
SELECT Query Execute করা
SELECT কিউরি ব্যবহার করে ডেটাবেস থেকে ডেটা রিড করা হয়। SQLAlchemy তে select() ফাংশন ব্যবহার করে এটি করা যায়।
উদাহরণ (SELECT):
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData
# ডেটাবেস ইঞ্জিন তৈরি
engine = create_engine('sqlite:///example.db', echo=True)
# Metadata অবজেক্ট তৈরি
metadata = MetaData()
# টেবিল তৈরি
users = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
Column('age', Integer))
# Connection তৈরি এবং SELECT অপারেশন
with engine.connect() as connection:
# SELECT কিউরি চালানো
select_query = users.select()
result = connection.execute(select_query)
# ফলাফল প্রিন্ট করা
for row in result:
print(row)
এখানে, select() ফাংশন ব্যবহার করে সমস্ত users টেবিলের ডেটা রিড করা হচ্ছে। ফলাফলটি একটি লিস্ট হিসেবে ফিরে আসে, এবং প্রতি রেকর্ড একটি tuple হিসেবে প্রদর্শিত হয়।
UPDATE Query Execute করা
UPDATE কিউরি ব্যবহার করে ডেটাবেসে বিদ্যমান ডেটা আপডেট করা হয়। SQLAlchemy তে update() ফাংশন ব্যবহার করে এটি করা যায়।
উদাহরণ (UPDATE):
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData
# ডেটাবেস ইঞ্জিন তৈরি
engine = create_engine('sqlite:///example.db', echo=True)
# Metadata অবজেক্ট তৈরি
metadata = MetaData()
# টেবিল তৈরি
users = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
Column('age', Integer))
# Connection তৈরি এবং UPDATE অপারেশন
with engine.connect() as connection:
# UPDATE কিউরি চালানো
update_query = users.update().where(users.c.id == 1).values(age=30)
connection.execute(update_query)
এখানে, update().where() ব্যবহার করে id 1 এর রেকর্ডের age কলাম আপডেট করা হচ্ছে।
DELETE Query Execute করা
DELETE কিউরি ব্যবহার করে ডেটাবেস থেকে রেকর্ড মুছে ফেলা হয়। SQLAlchemy তে delete() ফাংশন ব্যবহার করে এটি করা যায়।
উদাহরণ (DELETE):
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData
# ডেটাবেস ইঞ্জিন তৈরি
engine = create_engine('sqlite:///example.db', echo=True)
# Metadata অবজেক্ট তৈরি
metadata = MetaData()
# টেবিল তৈরি
users = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
Column('age', Integer))
# Connection তৈরি এবং DELETE অপারেশন
with engine.connect() as connection:
# DELETE কিউরি চালানো
delete_query = users.delete().where(users.c.id == 1)
connection.execute(delete_query)
এখানে, delete().where() ব্যবহার করে id 1 এর রেকর্ডটি ডেটাবেস থেকে মুছে ফেলা হচ্ছে।
Session ব্যবহারের মাধ্যমে SQL Query Execute করা
SQLAlchemy তে Session ব্যবহারের মাধ্যমে SQL স্টেটমেন্ট চালানো সম্ভব। নিচে একটি উদাহরণ দেওয়া হলো যেখানে INSERT এবং SELECT কিউরি Session এর মাধ্যমে চালানো হয়েছে।
উদাহরণ:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
from sqlalchemy.orm import sessionmaker
# ডেটাবেস ইঞ্জিন তৈরি
engine = create_engine('sqlite:///example.db', echo=True)
# Metadata অবজেক্ট তৈরি
metadata = MetaData()
# টেবিল তৈরি
users = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
Column('age', Integer))
# টেবিল ডেটাবেসে তৈরি করা
metadata.create_all(engine)
# Session তৈরি
Session = sessionmaker(bind=engine)
session = Session()
# INSERT Query চালানো
new_user = users.insert().values(name="Jane Doe", age=28)
session.execute(new_user)
session.commit()
# SELECT Query চালানো
select_query = users.select()
result = session.execute(select_query)
# ফলাফল প্রিন্ট করা
for row in result:
print(row)
# Session বন্ধ করা
session.close()
এখানে Session ব্যবহার করে INSERT এবং SELECT কিউরি কার্যকর করা হয়েছে। session.execute() এর মাধ্যমে SQLAlchemy কিউরি চালানো হয় এবং session.commit() এর মাধ্যমে ইনসার্ট করা ডেটা ডেটাবেসে সেভ হয়।
সারাংশ
SQLAlchemy তে SQL কিউরি যেমন INSERT, SELECT, UPDATE, এবং DELETE চালানো খুবই সহজ এবং কার্যকরী। Core পদ্ধতিতে insert(), select(), update(), এবং delete() ফাংশন ব্যবহার করে ডেটাবেস অপারেশনগুলো সম্পাদন করা হয়। এছাড়া Session ব্যবহারের মাধ্যমে SQLAlchemy ORM দিয়ে ডেটাবেসে অপারেশন করা যায়। SQLAlchemy ডেটাবেসের সাথে যোগাযোগ ও কার্যক্রম পরিচালনা করার জন্য একটি শক্তিশালী এবং নমনীয় টুল সরবরাহ করে।
SQLAlchemy তে ডেটা fetching এবং filtering অত্যন্ত গুরুত্বপূর্ণ প্রক্রিয়া, যা ডেটাবেস থেকে ডেটা সংগ্রহ এবং তার উপরে নির্দিষ্ট শর্তাবলী প্রয়োগ করতে ব্যবহৃত হয়। SQLAlchemy এর ORM (Object Relational Mapping) এবং Core উভয়ের মাধ্যমে ডেটা fetch এবং filter করা যায়। এখানে ORM এর মাধ্যমে ডেটা fetching এবং filtering করার প্রক্রিয়া আলোচনা করা হবে।
Data Fetching Techniques
SQLAlchemy তে ডেটা fetch করার জন্য querying করা হয়, যা ডেটাবেস থেকে ডেটা নির্বাচনের জন্য ব্যবহৃত হয়। এখানে SQLAlchemy ORM ব্যবহার করে ডেটা fetch করার কিছু মূল পদ্ধতি তুলে ধরা হলো।
All() Method:
all() মেথড ব্যবহার করে সমস্ত রেকর্ড একবারে fetch করা যায়।
# সব রেকর্ড fetch করা
users = session.query(User).all()
for user in users:
print(user.name, user.age)
এখানে, session.query(User).all() সমস্ত User টেবিলের রেকর্ড সংগ্রহ করবে।
First() Method:
first() মেথড ব্যবহার করে প্রথম রেকর্ডটি fetch করা যায়।
# প্রথম রেকর্ড fetch করা
first_user = session.query(User).first()
print(first_user.name, first_user.age)
এখানে, first() শুধুমাত্র প্রথম রেকর্ডটি রিটার্ন করবে এবং যদি কোনো রেকর্ড না থাকে তবে None রিটার্ন করবে।
Filter() Method:
filter() মেথড ব্যবহার করে নির্দিষ্ট শর্তে ডেটা filter করা যায়।
# বয়স ২৫ এর বেশি ইউজার ফিল্টার করা
users = session.query(User).filter(User.age > 25).all()
for user in users:
print(user.name, user.age)
এখানে, filter(User.age > 25) শর্তে বয়স ২৫ এর বেশি সমস্ত ইউজারদের রেকর্ড fetch করবে।
Limit() Method:
limit() মেথড ব্যবহার করে একটি নির্দিষ্ট সংখ্যক রেকর্ড fetch করা যায়।
# প্রথম ৫টি ইউজার fetch করা
users = session.query(User).limit(5).all()
for user in users:
print(user.name, user.age)
এখানে, limit(5) শুধুমাত্র প্রথম ৫টি রেকর্ড রিটার্ন করবে।
Order By Method:
order_by() মেথড ব্যবহার করে ডেটাকে নির্দিষ্ট একটি কলামের উপর ভিত্তি করে সাজানো (ascending বা descending) যায়।
# বয়স অনুযায়ী সাজানো
users = session.query(User).order_by(User.age).all()
for user in users:
print(user.name, user.age)
এখানে, order_by(User.age) বয়স অনুযায়ী ডেটা সাজাবে। ডিফল্টভাবে এটি ascending অর্ডারে সাজায়, তবে যদি descending অর্ডার চান, তবে User.age.desc() ব্যবহার করতে হবে।
Data Filtering Techniques
SQLAlchemy তে ডেটা filter করার জন্য বেশ কয়েকটি কৌশল রয়েছে। এর মাধ্যমে আপনি আপনার ডেটাবেস কোয়েরি থেকে নির্দিষ্ট ডেটা বের করতে পারেন।
Filter By Method:
filter_by() মেথড ব্যবহার করে সহজ শর্তে ডেটা filter করা যায়। এটি SQLAlchemy এর ORM এর একটি সহজ পদ্ধতি।
# নাম 'John' এবং বয়স ২৫ এর ইউজার ফিল্টার করা
user = session.query(User).filter_by(name='John', age=25).first()
print(user.name, user.age)
এখানে, filter_by() ব্যবহার করে নাম এবং বয়সের ভিত্তিতে ইউজার filter করা হয়েছে। এটি শুধুমাত্র সঠিক মানগুলির সাথে রেকর্ড filter করে।
Multiple Filters:
একাধিক শর্ত ব্যবহার করে ডেটা filter করার জন্য filter() মেথডের মধ্যে একাধিক শর্ত দেওয়া যায়।
# বয়স ২৫ থেকে ৩৫ এর মধ্যে এবং নাম 'John' না হওয়া ইউজার filter করা
users = session.query(User).filter(User.age >= 25, User.age <= 35, User.name != 'John').all()
for user in users:
print(user.name, user.age)
এখানে, বয়সের শর্তের সাথে সাথে নামের শর্তও যোগ করা হয়েছে।
Using AND, OR, and NOT:
SQLAlchemy তে AND, OR, এবং NOT ব্যবহার করে আরও জটিল ফিল্টার শর্ত তৈরি করা যায়।
from sqlalchemy import or_
# বয়স ২৫ এর বেশি অথবা নাম 'Alice'
users = session.query(User).filter(or_(User.age > 25, User.name == 'Alice')).all()
for user in users:
print(user.name, user.age)
এখানে, or_() এর মাধ্যমে বয়স ২৫ এর বেশি অথবা নাম 'Alice' হওয়া ইউজারদের filter করা হয়েছে।
Like Method:
like() মেথড ব্যবহার করে pattern matching করা যায় (যেমন SQL এর LIKE কিউরির মতো)।
# নামের মধ্যে 'Jo' থাকা ইউজার filter করা
users = session.query(User).filter(User.name.like('%Jo%')).all()
for user in users:
print(user.name, user.age)
এখানে, %Jo% দ্বারা যেসব নামের মধ্যে "Jo" থাকবে, সেগুলি filter করা হবে।
Combining Filters with Limit and Order
SQLAlchemy তে একাধিক filtering, ordering, এবং limiting একসাথে ব্যবহার করা যায়। উদাহরণস্বরূপ:
# বয়স ২৫ এর বেশি, নাম 'Alice' না, এবং নাম অনুযায়ী সাজানো, প্রথম ১০ জন ইউজার fetch করা
users = session.query(User).filter(User.age > 25).filter(User.name != 'Alice').order_by(User.name).limit(10).all()
for user in users:
print(user.name, user.age)
এখানে, filter(), order_by(), এবং limit() একত্রে ব্যবহার করা হয়েছে।
সারাংশ
SQLAlchemy তে data fetching এবং filtering অত্যন্ত শক্তিশালী এবং নমনীয় পদ্ধতি। all(), first(), filter(), order_by(), limit() ইত্যাদি মেথড ব্যবহার করে ডেটাবেস থেকে ডেটা সহজে fetch করা যায় এবং বিভিন্ন শর্তে ডেটা filter করা সম্ভব। SQLAlchemy তে filtering techniques যেমন filter_by(), and_(), or_(), like() ব্যবহার করে আপনি আরো সুনির্দিষ্ট ডেটা নির্বাচন করতে পারেন।
Read more