TinyDB একটি হালকা-ওজনের ডাটাবেস হলেও, এটি ডেটাবেসের উপর বিভিন্ন Hooks ব্যবহার করার সুযোগ প্রদান করে। Hooks হলো বিশেষ ফাংশন বা মেথড যা ডেটা ইনসার্ট, আপডেট, বা ডিলিট করার সময় পূর্বে বা পরে কার্যকর হয়। এগুলি ডেটা ম্যানিপুলেশন প্রক্রিয়াতে স্বয়ংক্রিয় কাজ করতে সাহায্য করে, যেমন ডেটার প্রমাণীকরণ, ট্রান্সফরমেশন, লগিং বা অন্যান্য অপারেশন।
TinyDB তে সরাসরি Pre-insert এবং Post-insert Hooks নেই, তবে মিডলওয়্যার এবং কাস্টম স্টোরেজ ব্যবহার করে এগুলো বাস্তবায়ন করা সম্ভব। আপনি একটি custom storage বা middleware তৈরি করে ডেটা ইনসার্টের আগে বা পরে যেকোনো কাজ করতে পারেন।
Pre-insert, Post-insert এবং অন্যান্য Hooks কিভাবে কাজ করে?
Pre-insert Hook: এটি ডেটা ইনসার্ট করার আগের প্রক্রিয়া পরিচালনা করে। এই সময় আপনি ডেটা যাচাই বা প্রক্রিয়া করতে পারেন।
Post-insert Hook: এটি ডেটা ইনসার্ট করার পর কার্যকর হয়। এখানে আপনি লগিং, ইনডেক্স আপডেট বা অন্য কোনো কার্যক্রম করতে পারেন।
TinyDB তে Pre-insert এবং Post-insert Hook এর উদাহরণ
TinyDB তে Pre-insert এবং Post-insert Hooks ব্যবহার করার জন্য middleware এবং custom storage ব্যবহার করা যেতে পারে।
১. Pre-insert Hook
Pre-insert Hook কার্যকর করার জন্য, আপনি ডেটা ইনসার্ট করার আগে কিছু যাচাই বা ট্রান্সফরমেশন করতে পারেন।
from tinydb import TinyDB, Query
from tinydb.middlewares import CachingMiddleware
from tinydb.storages import JSONStorage
# কাস্টম স্টোরেজ তৈরি
class PreInsertMiddleware(CachingMiddleware):
def __init__(self, storage):
super().__init__(storage)
def write(self, data):
# Pre-insert hook: এখানে ডেটা যাচাই বা প্রক্রিয়া করা যায়
print(f"Pre-insert: {data}")
# ডেটা লেখার জন্য রিটার্ন করা
return super().write(data)
# কাস্টম স্টোরেজের সাথে TinyDB তৈরি
db = TinyDB('db.json', storage=PreInsertMiddleware(JSONStorage))
# ডেটা ইনসার্ট করা
db.insert({'name': 'Aziz', 'age': 25, 'city': 'Dhaka'})
উল্লেখ্য: এই উদাহরণে, Pre-insert hook নিশ্চিত করে যে, ডেটা ইনসার্টের আগে কিছু কার্যক্রম যেমন প্রক্রিয়া বা যাচাই করা হয়।
২. Post-insert Hook
Post-insert Hook কার্যকর করার জন্য, ডেটা ইনসার্ট করার পরে কিছু কার্যক্রম যেমন লগিং বা অন্য কোনো অপারেশন করা যেতে পারে।
from tinydb import TinyDB, Query
from tinydb.middlewares import CachingMiddleware
from tinydb.storages import JSONStorage
# কাস্টম স্টোরেজ তৈরি
class PostInsertMiddleware(CachingMiddleware):
def __init__(self, storage):
super().__init__(storage)
def write(self, data):
# ডেটা লেখার পর (Post-insert hook) কিছু প্রক্রিয়া করা
result = super().write(data)
print(f"Post-insert: Data inserted - {data}")
# এখানে লগিং বা অন্য কোনো কাজ করা যাবে
return result
# কাস্টম স্টোরেজের সাথে TinyDB তৈরি
db = TinyDB('db.json', storage=PostInsertMiddleware(JSONStorage))
# ডেটা ইনসার্ট করা
db.insert({'name': 'Mehedi', 'age': 30, 'city': 'Chittagong'})
উল্লেখ্য: এই উদাহরণে, Post-insert hook ডেটা ইনসার্ট করার পরে কার্যকর হয়, যেখানে আপনি লগিং বা অন্য কোন পরবর্তী কাজ করতে পারেন।
অন্যান্য Hooks: Update, Delete
TinyDB তে Pre-update এবং Post-update hooksও প্রয়োগ করা যেতে পারে, যেগুলি ডেটা আপডেট করার পূর্বে এবং পরে কার্যকর হয়।
৩. Pre-update Hook
class PreUpdateMiddleware(CachingMiddleware):
def write(self, data):
# Pre-update hook: ডেটা আপডেটের আগে কার্যক্রম
print(f"Pre-update: {data}")
return super().write(data)
db = TinyDB('db.json', storage=PreUpdateMiddleware(JSONStorage))
# ডেটা আপডেট করা
db.update({'age': 32}, Query().name == 'Mehedi')
৪. Post-update Hook
class PostUpdateMiddleware(CachingMiddleware):
def write(self, data):
result = super().write(data)
print(f"Post-update: Data updated - {data}")
return result
db = TinyDB('db.json', storage=PostUpdateMiddleware(JSONStorage))
# ডেটা আপডেট করা
db.update({'age': 32}, Query().name == 'Mehedi')
৫. Pre-delete এবং Post-delete Hook
ডেটা ডিলিটের সময়ও Pre-delete এবং Post-delete hooks ব্যবহার করা যেতে পারে।
class PreDeleteMiddleware(CachingMiddleware):
def write(self, data):
print(f"Pre-delete: {data}")
return super().write(data)
db = TinyDB('db.json', storage=PreDeleteMiddleware(JSONStorage))
# ডেটা ডিলিট করা
db.remove(Query().name == 'Aziz')
সারাংশ
TinyDB তে Pre-insert, Post-insert, Pre-update, Post-update, Pre-delete, এবং Post-delete এর মতো hooks সরাসরি সমর্থিত না হলেও, আপনি middleware এবং custom storage ব্যবহার করে এইসব hooks বাস্তবায়ন করতে পারেন। এই hooks ডেটার ইনসার্ট, আপডেট এবং ডিলিট প্রক্রিয়াগুলিকে আরও নিয়ন্ত্রণযোগ্য এবং কার্যকর করে তোলে, যেমন ডেটা যাচাই, লগিং, বা অন্য কোন পরবর্তী কাজ করা।
Read more