Python की स्टैंडर्ड लाइब्रेरी में shelve मॉड्यूल एक सरल लेकिन प्रभावी टूल है जब रिलेशनल डेटाबेस समाधान की आवश्यकता न हो तो पर्सिस्टेंट डेटा स्टोरेज के लिए। इस मॉड्यूल में डिफाइन shelf ऑब्जेक्ट एक डिक्शनरी-जैसा ऑब्जेक्ट है जो डिस्क फ़ाइल में स्थायी रूप से स्टोर होता है। यह UNIX जैसे सिस्टम पर dbm डेटाबेस के समान फ़ाइल बनाता है। केवल स्ट्रिंग डेटा टाइप को इस विशेष डिक्शनरी ऑब्जेक्ट में कुंजी के रूप में उपयोग किया जा सकता है, जबकि कोई भी पिक्लेबल ऑब्जेक्ट वैल्यू के रूप में काम कर सकता है।
shelve मॉड्यूल निम्न तीन क्लासेज डिफाइन करता है:
| क्र.सं. | मॉड्यूल और विवरण |
|---|---|
| 1 | Shelf शेल्फ इम्प्लीमेंटेशन के लिए बेस क्लास। इसे डिक्ट-जैसे ऑब्जेक्ट से इनिशियलाइज़ किया जाता है। |
| 2 | BsdDbShelf यह Shelf क्लास का सबक्लास है। इसके कंस्ट्रक्टर को पास किया गया डिक्ट ऑब्जेक्ट first(), next(), previous(), last() और set_location() मेथड्स को सपोर्ट करना चाहिए। |
| 3 | DbfilenameShelf यह भी 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() दूसरे डिक्ट/इटरेबल से शेल्फ अपडेट करता है। |
| 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 मॉड्यूल के बारे में सीखा जो पर्सिस्टेंट डिक्शनरी ऑब्जेक्ट स्टोर करने के लिए सुविधाजनक तंत्र प्रदान करता है।