কম্পিউটার টিউটোরিয়াল

পাইথনে অবজেক্ট পারসিস্টেন্স (shelve মডিউল)

পাইথনের স্ট্যান্ডার্ড লাইব্রেরির shelve মডিউল একটি সহজ কিন্তু কার্যকর টুল যা পারসিস্টেন্ট ডেটা স্টোরেজের জন্য ব্যবহৃত হয় যখন রিলেশনাল ডেটাবেস সমাধান দরকার নয়। এই মডিউলে সংজ্ঞায়িত shelf অবজেক্ট একটি ডিকশনারি-সদৃশ অবজেক্ট যা ডিস্ক ফাইলে পারসিস্টেন্টলি সংরক্ষিত হয়। এটি ইউনিক্স-লাইক সিস্টেমে dbm ডেটাবেসের সদৃশ একটি ফাইল তৈরি করে। এই স্পেশাল ডিকশনারি অবজেক্টে শুধু স্ট্রিং ডেটা টাইপ কী হিসেবে ব্যবহার করা যায়, তবে যেকোনো পিকলযোগ্য অবজেক্ট ভ্যালু হিসেবে কাজ করতে পারে।

shelve মডিউল তিনটি ক্লাস সংজ্ঞায়িত করে:

ক্র.নং মডিউল ও বর্ণনা
1 Shelf
শেলফ ইমপ্লিমেন্টেশনের বেস ক্লাস। এটি dict-সদৃশ অবজেক্ট দিয়ে ইনিশিয়ালাইজড হয়।
2 BsdDbShelf
Shelf ক্লাসের সাবক্লাস। এর কনস্ট্রাক্টরে পাস করা dict অবজেক্ট অবশ্যই first(), next(), previous(), last() এবং set_location() মেথড সাপোর্ট করতে হবে।
3 DbfilenameShelf
Shelf-এর সাবক্লাস কিন্তু এর কনস্ট্রাক্টর dict অবজেক্টের বদলে ফাইলনেম প্যারামিটার হিসেবে নেয়।

Shelf অবজেক্ট তৈরির সবচেয়ে সহজ উপায় হলো shelve মডিউলে সংজ্ঞায়িত open() ফাংশন ব্যবহার করা যা DbfilenameShelf অবজেক্ট ফেরত দেয়।

open(filename, flag='c', protocol=None, writeback=False)

filename প্যারামিটার তৈরি হওয়া ডেটাবেসের জন্য অ্যাসাইন করা হয়।

flag প্যারামিটারের ডিফল্ট ভ্যালু 'c' (রিড/রাইট অ্যাক্সেস)। অন্যান্য ফ্ল্যাগ: 'w' (রাইট অনলি), 'r' (রিড অনলি), 'n' (নতুন রিড/রাইট সহ)।

protocol প্যারামিটার পিকল প্রোটোকল নির্দেশ করে। writeback প্যারামিটার ডিফল্টভাবে false। True সেট করলে অ্যাক্সেস করা এন্ট্রিগুলো ক্যাশে হয়। প্রতিটি অ্যাক্সেস sync() ও close() অপারেশন কল করে তাই প্রসেস ধীর হয়।

নিচের কোড একটি ডেটাবেস তৈরি করে এবং সেখানে ডিকশনারি এন্ট্রি সংরক্ষণ করে:

import shelve
s = shelve.open("test")
s['name'] = "Ajay"
s['age'] = 23
s['marks'] = 75
s.close()

এটি করেন্ট ডিরেক্টরিতে test.dir ফাইল তৈরি করবে এবং কী-ভ্যালু ডেটা হ্যাশড ফর্মে সংরক্ষণ করবে। Shelf অবজেক্টে নিচের মেথডগুলো উপলব্ধ:

ক্র.নং মেথড ও বর্ণনা
1 close()
পারসিস্টেন্ট ডিক্ট অবজেক্ট সিঙ্ক্রোনাইজ ও ক্লোজ করে।
2 sync()
শেলফ writeback=True দিয়ে খোলা থাকলে ক্যাশের সব এন্ট্রি রাইট ব্যাক করে।
3 get()
কীটির সাথে যুক্ত ভ্যালু ফেরত দেয়।
4 items()
টাপলের লিস্ট − প্রতিটি টাপল কী-ভ্যালু জোড়া।
5 keys()
শেলফ কীগুলোর লিস্ট।
6 pop()
নির্দিষ্ট কী মুছে ফেলে এবং সংশ্লিষ্ট ভ্যালু ফেরত দেয়।
7 update()
অন্য dict/iterable থেকে শেলফ আপডেট করে।
8 values()
শেলফ ভ্যালুগুলোর লিস্ট।

শেলফে একটি নির্দিষ্ট কীটির ভ্যালু এক্সেস করতে:

>>> s = shelve.open('test')
>>> s['age']
23
>>> s['age'] = 25
>>> s.get('age')
25

items(), keys() এবং values() মেথডগুলো ভিউ অবজেক্ট ফেরত দেয়।

>>> list(s.items())
[('name', 'Ajay'), ('age', 25), ('marks', 75)]
>>> list(s.keys())
['name', 'age', 'marks']
>>> list(s.values())
['Ajay', 25, 75]

শেলফ থেকে কী-ভ্যালু জোড়া মুছতে:

>>> s.pop('marks')
75
>>> list(s.items())
[('name', 'Ajay'), ('age', 25)]

লক্ষ্য করুন marks-75 কী-ভ্যালু জোড়াটি মুছে গেছে।

অন্য একটি ডিকশনারির আইটেম শেলফের সাথে মার্জ করতে update() মেথড ব্যবহার করুন:

>>> d = {'salary': 10000, 'designation': 'manager'}
>>> s.update(d)
>>> list(s.items())
[('name', 'Ajay'), ('age', 25), ('salary', 10000), ('designation', 'manager')]

এই আর্টিকেলে আমরা shelve মডিউল সম্পর্কে শিখলাম যা পারসিস্টেন্ট ডিকশনারি অবজেক্ট সংরক্ষণের সুবিধাজনক প্রক্রিয়া প্রদান করে।

  1. পাইথন অবজেক্ট কম্পैरিজন: "is" বনাম "=="

  2. পাইথনে অবজেক্ট ইন্সপেক্টর আছে কি?

  3. পাইথনে অবজেক্ট কীভাবে ডিস্ট্রয় করবেন?

  4. পাইথনে TimeTuple কী?