A ``shelf'' is a persistent, dictionary-like object. The difference
with ``dbm'' databases is that the values (not the keys!) in a shelf
can be essentially arbitrary Python objects -- anything that the
pickle module can handle. This includes most class
instances, recursive data types, and objects containing lots of shared
sub-objects. The keys are ordinary strings.
open( |
filename[,flag='c'[,protocol=None [,writeback=False ]]]) |
-
Open a persistent dictionary. The filename specified is the base filename
for the underlying database. As a side-effect, an extension may be added to
the filename and more than one file may be created. By default, the
underlying database file is opened for reading and writing. The optional
flag parameter has the same interpretation as the flag
parameter of anydbm.open.
By default, version 0 pickles are used to serialize values.
The version of the pickle protocol can be specified with the
protocol parameter.
Changed in version 2.3:
The protocol
parameter was added.
By default, mutations to persistent-dictionary mutable entries are not
automatically written back. If the optional writeback parameter
is set to True, all entries accessed are cached in memory, and
written back at close time; this can make it handier to mutate mutable
entries in the persistent dictionary, but, if many entries are
accessed, it can consume vast amounts of memory for the cache, and it
can make the close operation very slow since all accessed entries are
written back (there is no way to determine which accessed entries are
mutable, nor which ones were actually mutated).
Shelve objects support all methods supported by dictionaries. This eases
the transition from dictionary based scripts to those requiring persistent
storage.
One additional method is supported:
-
Write back all entries in the cache if the shelf was opened with
writeback set to True. Also empty the cache and synchronize
the persistent dictionary on disk, if feasible. This is called automatically
when the shelf is closed with close().
Release 2.5.2, documentation updated on 21st February, 2008.
See About this document... for information on suggesting changes.
|