blob: 63187234065def6f9391090502d11c24a12c4d5b [file] [log] [blame]
Fred Drake295da241998-08-10 19:42:37 +00001\section{\module{shelve} ---
Thomas Woutersf8316632000-07-16 19:01:10 +00002 Python object persistence}
Fred Drakeb91e9341998-07-23 17:59:49 +00003
Fred Drakeffbe6871999-04-22 21:23:22 +00004\declaremodule{standard}{shelve}
Thomas Woutersf8316632000-07-16 19:01:10 +00005\modulesynopsis{Python object persistence.}
Fred Drakeb91e9341998-07-23 17:59:49 +00006
Guido van Rossumd1883581995-02-15 15:53:08 +00007
8A ``shelf'' is a persistent, dictionary-like object. The difference
9with ``dbm'' databases is that the values (not the keys!) in a shelf
10can be essentially arbitrary Python objects --- anything that the
Fred Drake01553701999-04-05 19:46:21 +000011\refmodule{pickle} module can handle. This includes most class
12instances, recursive data types, and objects containing lots of shared
Guido van Rossumd1883581995-02-15 15:53:08 +000013sub-objects. The keys are ordinary strings.
Fred Drake9ab2b2ec1997-12-15 21:59:33 +000014\refstmodindex{pickle}
Guido van Rossumd1883581995-02-15 15:53:08 +000015
Skip Montanaro190613c2003-01-21 01:38:47 +000016\begin{funcdesc}{open}{filename\optional{,flag='c'\optional{,binary=\code{False}}}}
17Open a persistent dictionary. By default, the underlying database file is
18opened for reading and writing. The optional \var{flag} pararameter, if set
19to \code{'r'}, can be used to force the file to be opened in read-only mode.
20By default, ASCII pickles are used to serialize values. If the optional
21{}\var{binary} parameter is set to \var{True}, binary pickles will be used
22instead.
23\end{funcdesc}
Guido van Rossumd1883581995-02-15 15:53:08 +000024
Skip Montanaro190613c2003-01-21 01:38:47 +000025Shelve objects support all methods supported by dictionaries. This eases
26the transition from dictionary based scripts to those requiring persistent
27storage.
Guido van Rossumd1883581995-02-15 15:53:08 +000028
Skip Montanaro190613c2003-01-21 01:38:47 +000029\subsection{Restrictions}
Guido van Rossum5680b951995-02-16 16:29:01 +000030
31\begin{itemize}
32
33\item
Fred Drake01553701999-04-05 19:46:21 +000034The choice of which database package will be used
Skip Montanaro190613c2003-01-21 01:38:47 +000035(such as \refmodule{dbm}, \refmodule{gdbm} or \refmodule{bsddb}) depends on
36which interface is available. Therefore it is not safe to open the database
37directly using \refmodule{dbm}. The database is also (unfortunately) subject
Fred Drake01553701999-04-05 19:46:21 +000038to the limitations of \refmodule{dbm}, if it is used --- this means
39that (the pickled representation of) the objects stored in the
40database should be fairly small, and in rare cases key collisions may
41cause the database to refuse updates.
Fred Drake9ab2b2ec1997-12-15 21:59:33 +000042\refbimodindex{dbm}
43\refbimodindex{gdbm}
Skip Montanaro190613c2003-01-21 01:38:47 +000044\refbimodindex{bsddb}
Guido van Rossum5680b951995-02-16 16:29:01 +000045
46\item
Skip Montanaro3bf99e32002-12-08 18:36:24 +000047Depending on the implementation, closing a persistent dictionary may
48or may not be necessary to flush changes to disk. The \method{__del__}
49method of the \class{Shelf} class calls the \method{close} method, so the
50programmer generally need not do this explicitly.
Guido van Rossumd1883581995-02-15 15:53:08 +000051
Guido van Rossum5680b951995-02-16 16:29:01 +000052\item
Fred Drake01553701999-04-05 19:46:21 +000053The \module{shelve} module does not support \emph{concurrent} read/write
Guido van Rossum470be141995-03-17 16:07:09 +000054access to shelved objects. (Multiple simultaneous read accesses are
55safe.) When a program has a shelf open for writing, no other program
56should have it open for reading or writing. \UNIX{} file locking can
57be used to solve this, but this differs across \UNIX{} versions and
58requires knowledge about the database implementation used.
Guido van Rossum5680b951995-02-16 16:29:01 +000059
60\end{itemize}
Fred Drakec8593501998-08-24 18:46:14 +000061
Skip Montanaro3bf99e32002-12-08 18:36:24 +000062\begin{classdesc}{Shelf}{dict\optional{, binary=False}}
63A subclass of \class{UserDict.DictMixin} which stores pickled values in the
Raymond Hettinger2ca24332003-01-04 01:53:38 +000064\var{dict} object. If the \var{binary} parameter is \code{True}, binary
Skip Montanaro3bf99e32002-12-08 18:36:24 +000065pickles will be used. This can provide much more compact storage than plain
Raymond Hettinger2ca24332003-01-04 01:53:38 +000066text pickles, depending on the nature of the objects stored in the database.
Skip Montanaro3bf99e32002-12-08 18:36:24 +000067\end{classdesc}
68
69\begin{classdesc}{BsdDbShelf}{dict\optional{, binary=False}}
70A subclass of \class{Shelf} which exposes \method{first}, \method{next},
Raymond Hettinger2ca24332003-01-04 01:53:38 +000071\method{previous}, \method{last} and \method{set_location} which are
Skip Montanaro3bf99e32002-12-08 18:36:24 +000072available in the \module{bsddb} module but not in other database modules.
73The \var{dict} object passed to the constructor must support those methods.
74This is generally accomplished by calling one of \function{bsddb.hashopen},
75\function{bsddb.btopen} or \function{bsddb.rnopen}. The optional
76\var{binary} parameter has the same interpretation as for the \class{Shelf}
77class.
78\end{classdesc}
79
Raymond Hettinger2ca24332003-01-04 01:53:38 +000080\begin{classdesc}{DbfilenameShelf}{filename\optional{, flag='c'\optional{, binary=False}}}
81A subclass of \class{Shelf} which accepts a \var{filename} instead of a dict-like
Skip Montanaro3bf99e32002-12-08 18:36:24 +000082object. The underlying file will be opened using \function{anydbm.open}.
83By default, the file will be created and opened for both read and write.
Skip Montanaro190613c2003-01-21 01:38:47 +000084The optional \var{flag} parameter has the same interpretation as for the
85\function{open} function.
Skip Montanaro3bf99e32002-12-08 18:36:24 +000086The optional \var{binary} parameter has the same interpretation as for the
87\class{Shelf} class.
88\end{classdesc}
Fred Drakec8593501998-08-24 18:46:14 +000089
Skip Montanaro190613c2003-01-21 01:38:47 +000090\subsection{Example}
91
92To summarize the interface (\code{key} is a string, \code{data} is an
93arbitrary object):
94
95\begin{verbatim}
96import shelve
97
98d = shelve.open(filename) # open -- file may get suffix added by low-level
99 # library
100
101d[key] = data # store data at key (overwrites old data if
102 # using an existing key)
103data = d[key] # retrieve data at key (raise KeyError if no
104 # such key)
105del d[key] # delete data stored at key (raises KeyError
106 # if no such key)
107flag = d.has_key(key) # true if the key exists
108list = d.keys() # a list of all existing keys (slow!)
109
110d.close() # close it
111\end{verbatim}
112
Fred Drakec8593501998-08-24 18:46:14 +0000113\begin{seealso}
Fred Drake01553701999-04-05 19:46:21 +0000114 \seemodule{anydbm}{Generic interface to \code{dbm}-style databases.}
Skip Montanaro3bf99e32002-12-08 18:36:24 +0000115 \seemodule{bsddb}{BSD \code{db} database interface.}
116 \seemodule{dbhash}{Thin layer around the \module{bsddb} which provides an
117 \function{open} function like the other database modules.}
Fred Drake01553701999-04-05 19:46:21 +0000118 \seemodule{dbm}{Standard \UNIX{} database interface.}
119 \seemodule{dumbdbm}{Portable implementation of the \code{dbm} interface.}
120 \seemodule{gdbm}{GNU database interface, based on the \code{dbm} interface.}
Fred Drakec8593501998-08-24 18:46:14 +0000121 \seemodule{pickle}{Object serialization used by \module{shelve}.}
Fred Drakeffbe6871999-04-22 21:23:22 +0000122 \seemodule{cPickle}{High-performance version of \refmodule{pickle}.}
Fred Drakec8593501998-08-24 18:46:14 +0000123\end{seealso}