3.17.2 Example

Python 2.2

3.17.2 Example

To summarize the interface (key is a string, data is an arbitrary object):

import shelve

d = shelve.open(filename) # open -- file may get suffix added by low-level
                          # library

d[key] = data   # store data at key (overwrites old data if
                # using an existing key)
data = d[key]   # retrieve a COPY of data at key (raise KeyError if no
                # such key)
del d[key]      # delete data stored at key (raises KeyError
                # if no such key)
flag = d.has_key(key)   # true if the key exists
list = d.keys() # a list of all existing keys (slow!)

# as d was opened WITHOUT writeback=True, beware:
d['xx'] = range(4)  # this works as expected, but...
d['xx'].append(5)   # *this doesn't!* -- d['xx'] is STILL range(4)!!!
# having opened d without writeback=True, you need to code carefully:
temp = d['xx']      # extracts the copy
temp.append(5)      # mutates the copy
d['xx'] = temp      # stores the copy right back, to persist it
# or, d=shelve.open(filename,writeback=True) would let you just code
# d['xx'].append(5) and have it work as expected, BUT it would also
# consume more memory and make the d.close() operation slower.

d.close()       # close it

See Also:

Generic interface to dbm-style databases.
BSD db database interface.
Thin layer around the bsddb which provides an open function like the other database modules.
Standard Unix database interface.
Portable implementation of the dbm interface.
GNU database interface, based on the dbm interface.
Object serialization used by shelve.
High-performance version of pickle.
See About this document... for information on suggesting changes.