Python Shelve Module

Overview:

One of the primitive forms of a database is a collection of values where each value is identified by a key, stored in disk and physical memory - called a DBM database or in a nutshell, a persistent dictionary.

The shelve module of Python Standard Library:

The shelve module of Python standard library is about providing the following functionalities to a Python program:

  • A dictionary of pickled Python objects identified by keys
  • A dictionary of pickled Python objects identified by keys that can be persisted to a file.
  • Provide one or more forms of popular DBM implementations. A DBM database in its primitive form is a dictionary that can be persisted to a file.

Types of shelves:

  • The shelve module of Python Standard Library provides multiple variants of shelves of pickles:
    • The DbfilenameShelf abstracts a dbm database and supports writing the keys vs pickles to a file.
    • The class Shelf offers a python dictionary of keys vs pickles.
    • The classes support caching from their actual storage: either disk or memory.

Example - Create a DbfilenameShelf object and write values:

import shelve

 

# Create a Shelf

shelf = shelve.open("/Valli/PythonProgs/TestShelve", "n");

 

# Check the type of the shelf

print("Type of the shelf object created:");

print(type(shelf));

 

# Add an integer and a double as values

shelf["a"] = 1;

shelf["b"] = 2.1;

 

# Add a python tuple

shelf["c"] = (2, 4, 6, 8);

 

# Add a python list

shelf["d"] = [1, 3, 5, 7];

 

print("Number of items present in the shelf:");

print(len(shelf));

 

# Close the shelf

shelf.close();

 

Output:

Type of the shelf object created:

<class 'shelve.DbfilenameShelf'>

Number of items present in the shelf:

4

 

Example - Open an existing DbfilenameShelf object and read the values:

# A python example program that reads values from a Shelf -

# a DbfilenameShelf

 

import shelve

 

dbFileName  = "/Valli/PythonProgs/TestShelve";

shelf       = shelve.open(dbFileName);

 

# Read all the items from the shelf

for item in shelf:

    print("%s:%s:%s"%(item, shelf[item], type(shelf[item])));

 

# Close the shelf

shelf.close();

Output:

b:2.1:<class 'float'>

d:[1, 3, 5, 7]:<class 'list'>

a:1:<class 'int'>

c:(2, 4, 6, 8):<class 'tuple'>

 

Shelf:

  • The Shelf class is a dictionary. The Shelf class subclasses the collections.abc.MutableMapping abstract base class. In Python, associative containers implement the interfaces put forth by the mapping or MutableMapping abstract base classes. The storage for a Shelf object is provided through the dictionary object it was initialized with during its creation. Remember, a dictionary uses another dictionary for its storage.
  • A Shelf object stores pickled Python objects against string keys. When a lookup is performed the Shelf method(s) perform unpickling of the Python objects and return the value.

Example:

# Example Python program to create an in-memory shelf

import shelve

import pickle

 

# Class definition

class Record:

 

    # Initialiser   

    def __init__(self, id, name, contents):

        self.id = id;

        self.name = name;

        self.contents = contents;

   

    def __repr__(self):

        return "Record>>id:%d, Name:%s, Contents:%s"%(self.id, self.name, self.contents);

       

r1 = Record(1, "rec1", "Hello World");

r2 = Record(2, "rec2", "Hello Universe");

 

d1 = {};

shelf = shelve.Shelf(d1);

 

# Python internally pickles the values

shelf["1"] = r1;

shelf["2"] = r2;

 

# Python internally unpickles the values

print(shelf["1"]);

print(shelf["2"]);

 

Output:

Record>>id:1, Name:rec1, Contents:Hello World

Record>>id:2, Name:rec2, Contents:Hello Universe


Copyright 2020 © pythontic.com