Python 3.7

dbm - यूनिक्स के लिए इंटरफेस "डेटाबेस"




python

dbm - यूनिक्स के लिए इंटरफेस "डेटाबेस"

स्रोत कोड: Lib/dbm/__init__.py

dbm DBM डेटाबेस के वेरिएंट के लिए एक सामान्य इंटरफ़ेस है - dbm.gnu या dbm.ndbm । यदि इनमें से कोई भी मॉड्यूल स्थापित नहीं है, तो मॉड्यूल dbm.dumb में धीमी-लेकिन-सरल कार्यान्वयन का उपयोग किया जाएगा। ओरेकल बर्कले डीबी के लिए एक तृतीय पक्ष इंटरफ़ेस है।

exception dbm.error

एक अपवाद जिसमें प्रत्येक समर्थित मॉड्यूल द्वारा उठाया जा सकता है, जिसमें एक अद्वितीय अपवाद भी होता है जिसका नाम dbm.error पहले आइटम के रूप में होता है - बाद का उपयोग तब किया जाता है जब dbm.error उठाया जाता है।

dbm.whichdb(filename)

यह फ़ंक्शन यह अनुमान लगाने का प्रयास करता है कि कौन से सरल डेटाबेस मॉड्यूल उपलब्ध हैं - dbm.gnu , dbm.ndbm या dbm.dumb - का उपयोग किसी फ़ाइल को खोलने के लिए किया जाना चाहिए।

निम्न में से एक मान लौटाता है: None अगर फ़ाइल को खोला नहीं जा सकता क्योंकि यह अपठनीय है या मौजूद नहीं है; खाली स्ट्रिंग ( '' ) यदि फ़ाइल के प्रारूप का अनुमान नहीं लगाया जा सकता है; या एक आवश्यक मॉड्यूल नाम युक्त स्ट्रिंग, जैसे 'dbm.ndbm' या 'dbm.gnu'

dbm.open(file, flag='r', mode=0o666)

डेटाबेस फ़ाइल फ़ाइल खोलें और एक संबंधित वस्तु लौटाएं।

यदि डेटाबेस फ़ाइल पहले से मौजूद है, तो उसके प्रकार को निर्धारित करने के लिए whichdb() फ़ंक्शन का उपयोग किया जाता है और उपयुक्त मॉड्यूल का उपयोग किया जाता है; यदि यह मौजूद नहीं है, तो ऊपर सूचीबद्ध पहला मॉड्यूल जो आयात किया जा सकता है, का उपयोग किया जाता है।

वैकल्पिक ध्वज तर्क हो सकता है:

मूल्य अर्थ
'r' केवल पढ़ने के लिए मौजूदा डेटाबेस खोलें (डिफ़ॉल्ट)
'w' पढ़ने और लिखने के लिए मौजूदा डेटाबेस खोलें
'c' पढ़ने और लिखने के लिए डेटाबेस खोलें, अगर यह मौजूद नहीं है तो इसे बनाएं
'n' हमेशा एक नया, खाली डेटाबेस बनाएं, पढ़ने और लिखने के लिए खुला

वैकल्पिक मोड तर्क फ़ाइल का यूनिक्स मोड है, जिसका उपयोग केवल तब किया जाता है जब डेटाबेस बनाना होता है। यह 0o666 को डिफॉल्ट 0o666 (और प्रचलित umask द्वारा संशोधित किया जाएगा)।

open() द्वारा लौटाई गई वस्तु open() शब्दकोश) के रूप में एक ही बुनियादी कार्यक्षमता का समर्थन करती है; कुंजियाँ और उनके संबंधित मान संग्रहीत, पुनर्प्राप्त और हटाए जा सकते हैं, और ऑपरेटर और keys() विधि उपलब्ध हैं, साथ ही get() और setdefault()

3.2 संस्करण में परिवर्तित: get() और setdefault() अब सभी डेटाबेस मॉड्यूल में उपलब्ध हैं।

कुंजी और मान हमेशा बाइट्स के रूप में संग्रहीत होते हैं। इसका मतलब यह है कि जब तार का उपयोग किया जाता है तो वे संग्रहीत होने से पहले डिफ़ॉल्ट रूप से डिफ़ॉल्ट एन्कोडिंग में बदल जाते हैं।

ये वस्तुएं एक बयान के with उपयोग किए जाने का समर्थन भी करती हैं, जो किए जाने पर स्वचालित रूप से उन्हें बंद कर देगी।

संस्करण 3.4 में बदला गया : open() द्वारा लौटाए गए ऑब्जेक्ट open() में संदर्भ प्रबंधन प्रोटोकॉल के लिए मूल समर्थन जोड़ा गया।

निम्न उदाहरण कुछ होस्टनाम और संबंधित शीर्षक रिकॉर्ड करता है, और फिर डेटाबेस की सामग्री प्रिंट करता है:

import dbm

# Open database, creating it if necessary.
with dbm.open('cache', 'c') as db:

    # Record some values
    db[b'hello'] = b'there'
    db['www.python.org'] = 'Python Website'
    db['www.cnn.com'] = 'Cable News Network'

    # Note that the keys are considered bytes now.
    assert db[b'www.python.org'] == b'Python Website'
    # Notice how the value is now in bytes.
    assert db['www.cnn.com'] == b'Cable News Network'

    # Often-used methods of the dict interface work too.
    print(db.get('python.org', b'not present'))

    # Storing a non-string key or value will raise an exception (most
    # likely a TypeError).
    db['www.yahoo.com'] = 4

# db is automatically closed when leaving the with statement.

यह भी देखें

Module shelve
दृढ़ता मॉड्यूल जो गैर-स्ट्रिंग डेटा संग्रहीत करता है।

अलग-अलग सबमॉड्यूल्स का वर्णन निम्नलिखित अनुभागों में किया गया है।

dbm.gnu - GNU की dbm की पुनर्व्याख्या

स्रोत कोड: Lib/dbm/gnu.py

यह मॉड्यूल dbm मॉड्यूल के समान है, लेकिन कुछ अतिरिक्त कार्यक्षमता प्रदान करने के बजाय GNU लाइब्रेरी gdbm का उपयोग करता है। कृपया ध्यान दें कि dbm.gnu और dbm.ndbm द्वारा बनाए गए फ़ाइल प्रारूप असंगत हैं।

dbm.gnu मॉड्यूल GNU DBM लाइब्रेरी को एक इंटरफ़ेस प्रदान करता है। dbm.gnu.gdbm ऑब्जेक्ट्स मैपिंग (शब्दकोशों) की तरह व्यवहार करते हैं, सिवाय इसके कि कुंजी और मान हमेशा स्टोर करने से पहले बाइट में बदल जाते हैं। gdbm ऑब्जेक्ट को प्रिंट करना कुंजियों और मूल्यों को प्रिंट नहीं करता है, और items() और values() तरीके समर्थित नहीं हैं।

exception dbm.gnu.error

dbm.gnu त्रुटियों पर dbm.gnu , जैसे कि I / O त्रुटियाँ। KeyError को सामान्य मैपिंग त्रुटियों के लिए उठाया जाता है, जैसे गलत कुंजी को निर्दिष्ट करना।

dbm.gnu.open(filename[, flag[, mode]])

एक gdbm डेटाबेस खोलें और एक gdbm ऑब्जेक्ट gdbm फ़ाइल नाम तर्क डेटाबेस फ़ाइल का नाम है।

वैकल्पिक ध्वज तर्क हो सकता है:

मूल्य अर्थ
'r' केवल पढ़ने के लिए मौजूदा डेटाबेस खोलें (डिफ़ॉल्ट)
'w' पढ़ने और लिखने के लिए मौजूदा डेटाबेस खोलें
'c' पढ़ने और लिखने के लिए डेटाबेस खोलें, अगर यह मौजूद नहीं है तो इसे बनाएं
'n' हमेशा एक नया, खाली डेटाबेस बनाएं, पढ़ने और लिखने के लिए खुला

डेटाबेस खोलने के तरीके को नियंत्रित करने के लिए निम्न अतिरिक्त वर्णों को ध्वज में जोड़ा जा सकता है:

मूल्य अर्थ
'f' डेटाबेस को फास्ट मोड में खोलें। डेटाबेस के लिए लिखा गया है सिंक्रनाइज़ नहीं किया जाएगा।
's' सिंक्रोनाइज़्ड मोड। यह डेटाबेस में परिवर्तन का कारण बनता है जिसे तुरंत फ़ाइल में लिखा जाता है।
'u' डेटाबेस को लॉक न करें।

सभी झंडे gdbm सभी संस्करणों के लिए मान्य नहीं हैं। मॉड्यूल निरंतर open_flags समर्थित ध्वज वर्णों की एक स्ट्रिंग है। यदि कोई अवैध ध्वज निर्दिष्ट किया जाता है तो अपवाद error को उठाया जाता है।

वैकल्पिक मोड तर्क फ़ाइल का यूनिक्स मोड है, जिसका उपयोग केवल तब किया जाता है जब डेटाबेस बनाना होता है। यह 0o666 को डिफॉल्ट 0o666

शब्दकोश जैसी विधियों के अलावा, gdbm ऑब्जेक्ट्स में निम्नलिखित विधियाँ हैं:

gdbm.firstkey()

इस विधि और nextkey() विधि का उपयोग करके डेटाबेस में प्रत्येक कुंजी पर लूप करना संभव है। ट्रैवर्सल को gdbm के आंतरिक हैश मानों द्वारा आदेशित किया gdbm , और इसे प्रमुख मानों द्वारा क्रमबद्ध नहीं किया जाएगा। यह विधि प्रारंभिक कुंजी लौटाती है।

gdbm.nextkey(key)

ट्रैवर्सल में कुंजी का अनुसरण करने वाली कुंजी देता है। निम्नलिखित कोड डेटाबेस db में हर कुंजी को प्रिंट करता है, बिना मेमोरी में एक सूची बनाने के लिए जो उन सभी को शामिल करता है:

k = db.firstkey()
while k != None:
    print(k)
    k = db.nextkey(k)
gdbm.reorganize()

यदि आपने बहुत सारे विलोपन किए हैं और gdbm फ़ाइल द्वारा उपयोग किए गए स्थान को सिकोड़ना चाहते हैं, तो यह दिनचर्या डेटाबेस को पुनर्गठित करेगी। gdbm ऑब्जेक्ट इस पुनर्गठन के उपयोग के अलावा किसी डेटाबेस फ़ाइल की लंबाई को छोटा नहीं करेगा; अन्यथा, हटाए गए फ़ाइल स्थान को रखा जाएगा और नए (कुंजी, मूल्य) जोड़े के रूप में पुन: उपयोग किया जाएगा।

gdbm.sync()

जब डेटाबेस को फास्ट मोड में खोला गया है, तो यह विधि डिस्क पर लिखे जाने वाले किसी भी अलिखित डेटा को बाध्य करती है।

gdbm.close()

gdbm डेटाबेस को बंद करें।

dbm.ndbm - ndbm पर आधारित इंटरफ़ेस

स्रोत कोड: Lib/dbm/ndbm.py

dbm.ndbm मॉड्यूल यूनिक्स "(n) dbm" लाइब्रेरी को एक इंटरफ़ेस प्रदान करता है। डीबीएम ऑब्जेक्ट्स मैपिंग (शब्दकोशों) की तरह व्यवहार करते हैं, सिवाय इसके कि चाबियों और मूल्यों को हमेशा बाइट्स के रूप में संग्रहीत किया जाता है। dbm ऑब्जेक्ट को प्रिंट करना कुंजियों और मूल्यों को प्रिंट नहीं करता है, और items() और values() तरीके समर्थित नहीं हैं।

इस मॉड्यूल का उपयोग "क्लासिक" ndbm इंटरफ़ेस या GNU GDBM संगतता इंटरफ़ेस के साथ किया जा सकता है। यूनिक्स पर, कॉन्फ़िगर स्क्रिप्ट इस मॉड्यूल के निर्माण को सरल बनाने के लिए उपयुक्त हेडर फ़ाइल का पता लगाने का प्रयास करेगी।

exception dbm.ndbm.error

dbm.ndbm त्रुटियों पर उठाया गया, जैसे कि I / O त्रुटियां। KeyError को सामान्य मैपिंग त्रुटियों के लिए उठाया जाता है, जैसे गलत कुंजी को निर्दिष्ट करना।

dbm.ndbm.library

उपयोग किए गए ndbm कार्यान्वयन पुस्तकालय का नाम।

dbm.ndbm.open(filename[, flag[, mode]])

एक dbm डेटाबेस खोलें और एक ndbm ऑब्जेक्ट वापस करें। फ़ाइल नाम तर्क डेटाबेस फ़ाइल ( .dir या .pag एक्सटेंशन के बिना) का नाम है।

वैकल्पिक ध्वज तर्क इनमें से एक मान होना चाहिए:

मूल्य अर्थ
'r' केवल पढ़ने के लिए मौजूदा डेटाबेस खोलें (डिफ़ॉल्ट)
'w' पढ़ने और लिखने के लिए मौजूदा डेटाबेस खोलें
'c' पढ़ने और लिखने के लिए डेटाबेस खोलें, अगर यह मौजूद नहीं है तो इसे बनाएं
'n' हमेशा एक नया, खाली डेटाबेस बनाएं, पढ़ने और लिखने के लिए खुला

वैकल्पिक मोड तर्क फ़ाइल का यूनिक्स मोड है, जिसका उपयोग केवल तब किया जाता है जब डेटाबेस बनाना होता है। यह 0o666 को डिफॉल्ट 0o666 (और प्रचलित umask द्वारा संशोधित किया जाएगा)।

शब्दकोश जैसी विधियों के अलावा, ndbm ऑब्जेक्ट्स निम्न विधि प्रदान करते हैं:

ndbm.close()

ndbm डेटाबेस को बंद करें।

dbm.dumb - पोर्टेबल DBM कार्यान्वयन

स्रोत कोड: Lib/dbm/dumb.py

ध्यान दें

dbm.dumb मॉड्यूल को अधिक मजबूत मॉड्यूल उपलब्ध नहीं होने पर dbm मॉड्यूल के लिए अंतिम उपाय के रूप में लक्षित किया जाता है। dbm.dumb मॉड्यूल गति के लिए नहीं लिखा गया है और लगभग उतना नहीं है जितना अन्य डेटाबेस मॉड्यूल के रूप में उपयोग किया जाता है।

dbm.dumb मॉड्यूल एक लगातार शब्दकोश जैसा इंटरफ़ेस प्रदान करता है जो पूरी तरह से पायथन में लिखा गया है। अन्य मॉड्यूल जैसे dbm.gnu विपरीत किसी बाहरी पुस्तकालय की आवश्यकता नहीं है। अन्य लगातार मैपिंग के साथ, कुंजी और मान हमेशा बाइट्स के रूप में संग्रहीत होते हैं।

मॉड्यूल निम्नलिखित को परिभाषित करता है:

exception dbm.dumb.error

dbm.dumb त्रुटियों पर उठाया गया, जैसे कि I / O त्रुटियां। KeyError को सामान्य मैपिंग त्रुटियों के लिए उठाया जाता है, जैसे गलत कुंजी को निर्दिष्ट करना।

dbm.dumb.open(filename[, flag[, mode]])

एक dumbdbm डेटाबेस खोलें और एक डंबल्ड ऑब्जेक्ट लौटाएँ। फ़ाइल नाम तर्क डेटाबेस फ़ाइल का आधार है (बिना किसी विशिष्ट एक्सटेंशन के)। जब एक डम्बल डेटाबेस बनाया जाता है, तो .dat और .dir एक्सटेंशन वाली फाइलें बनाई जाती हैं।

वैकल्पिक ध्वज तर्क केवल 'c' और 'n' मानों के शब्दार्थ का समर्थन करता है। अन्य मान डेटाबेस के लिए हमेशा अद्यतन के लिए खोले जाएंगे, और यदि यह मौजूद नहीं है तो बनाया जाएगा।

वैकल्पिक मोड तर्क फ़ाइल का यूनिक्स मोड है, जिसका उपयोग केवल तब किया जाता है जब डेटाबेस बनाना होता है। यह 0o666 को डिफॉल्ट 0o666 (और प्रचलित umask द्वारा संशोधित किया जाएगा)।

चेतावनी

अजगर के एएसटी संकलक में स्टैक की गहराई सीमाओं के कारण पर्याप्त रूप से बड़े / जटिल प्रविष्टि के साथ डेटाबेस लोड करते समय पायथन दुभाषिया को क्रैश करना संभव है।

संस्करण 3.5 में बदला: open() हमेशा एक नया डेटाबेस बनाता है जब ध्वज का मूल्य 'n'

संस्करण 3.6 के बाद से हटा दिया गया, संस्करण 3.8 में हटा दिया जाएगा: 'r' और 'w' मोड में डेटाबेस बनाना। डेटाबेस को 'r' मोड में बदलना।

collections.abc.MutableMapping द्वारा उपलब्ध कराए गए तरीकों के अलावा। dumbdbm वर्ग, dumbdbm ऑब्जेक्ट्स निम्न विधियाँ प्रदान करते हैं:

dumbdbm.sync()

डिस्क निर्देशिका और डेटा फ़ाइलों को सिंक्रनाइज़ करें। इस विधि को Shelve.sync() विधि द्वारा कहा जाता है।

dumbdbm.close()

dumbdbm डेटाबेस को बंद करें।