11.6. "anydbm" — Generic access to DBM-style databases
******************************************************

Note: The "anydbm" module has been renamed to "dbm" in Python 3.
  The *2to3* tool will automatically adapt imports when converting
  your sources to Python 3.

"anydbm" is a generic interface to variants of the DBM database —
"dbhash" (requires "bsddb"), "gdbm", or "dbm".  If none of these
modules is installed, the slow-but-simple implementation in module
"dumbdbm" will be used.

anydbm.open(filename[, flag[, mode]])

   Open the database file *filename* and return a corresponding
   object.

   If the database file already exists, the "whichdb" module is used
   to determine its type and the appropriate module is used; if it
   does not exist, the first module listed above that can be imported
   is used.

   The optional *flag* argument must be one of these values:

   +-----------+---------------------------------------------+
   | Value     | Meaning                                     |
   +===========+=============================================+
   | "'r'"     | Open existing database for reading only     |
   |           | (default)                                   |
   +-----------+---------------------------------------------+
   | "'w'"     | Open existing database for reading and      |
   |           | writing                                     |
   +-----------+---------------------------------------------+
   | "'c'"     | Open database for reading and writing,      |
   |           | creating it if it doesn’t exist             |
   +-----------+---------------------------------------------+
   | "'n'"     | Always create a new, empty database, open   |
   |           | for reading and writing                     |
   +-----------+---------------------------------------------+

   If not specified, the default value is "'r'".

   The optional *mode* argument is the Unix mode of the file, used
   only when the database has to be created.  It defaults to octal
   "0666" (and will be modified by the prevailing umask).

exception anydbm.error

   A tuple containing the exceptions that can be raised by each of the
   supported modules, with a unique exception also named
   "anydbm.error" as the first item — the latter is used when
   "anydbm.error" is raised.

The object returned by "open()" supports most of the same
functionality as dictionaries; keys and their corresponding values can
be stored, retrieved, and deleted, and the "has_key()" and "keys()"
methods are available.  Keys and values must always be strings.

The following example records some hostnames and a corresponding
title,  and then prints out the contents of the database:

   import anydbm

   # Open database, creating it if necessary.
   db = anydbm.open('cache', 'c')

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

   # Loop through contents.  Other dictionary methods
   # such as .keys(), .values() also work.
   for k, v in db.iteritems():
       print k, '\t', v

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

   # Close when done.
   db.close()

In addition to the dictionary-like methods, "anydbm" objects provide
the following method:

anydbm.close()

   Close the "anydbm" database.

See also:

  Module "dbhash"
     BSD "db" database interface.

  Module "dbm"
     Standard Unix database interface.

  Module "dumbdbm"
     Portable implementation of the "dbm" interface.

  Module "gdbm"
     GNU database interface, based on the "dbm" interface.

  Module "shelve"
     General object persistence built on top of  the Python "dbm"
     interface.

  Module "whichdb"
     Utility module used to determine the type of an existing
     database.
