• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1:mod:`dbm` --- Interfaces to Unix "databases"
2=============================================
3
4.. module:: dbm
5   :synopsis: Interfaces to various Unix "database" formats.
6
7**Source code:** :source:`Lib/dbm/__init__.py`
8
9--------------
10
11:mod:`dbm` is a generic interface to variants of the DBM database ---
12:mod:`dbm.gnu` or :mod:`dbm.ndbm`.  If none of these modules is installed, the
13slow-but-simple implementation in module :mod:`dbm.dumb` will be used.  There
14is a `third party interface <https://www.jcea.es/programacion/pybsddb.htm>`_ to
15the Oracle Berkeley DB.
16
17
18.. exception:: error
19
20   A tuple containing the exceptions that can be raised by each of the supported
21   modules, with a unique exception also named :exc:`dbm.error` as the first
22   item --- the latter is used when :exc:`dbm.error` is raised.
23
24
25.. function:: whichdb(filename)
26
27   This function attempts to guess which of the several simple database modules
28   available --- :mod:`dbm.gnu`, :mod:`dbm.ndbm` or :mod:`dbm.dumb` --- should
29   be used to open a given file.
30
31   Returns one of the following values: ``None`` if the file can't be opened
32   because it's unreadable or doesn't exist; the empty string (``''``) if the
33   file's format can't be guessed; or a string containing the required module
34   name, such as ``'dbm.ndbm'`` or ``'dbm.gnu'``.
35
36
37.. function:: open(file, flag='r', mode=0o666)
38
39   Open the database file *file* and return a corresponding object.
40
41   If the database file already exists, the :func:`whichdb` function is used to
42   determine its type and the appropriate module is used; if it does not exist,
43   the first module listed above that can be imported is used.
44
45   The optional *flag* argument can be:
46
47   +---------+-------------------------------------------+
48   | Value   | Meaning                                   |
49   +=========+===========================================+
50   | ``'r'`` | Open existing database for reading only   |
51   |         | (default)                                 |
52   +---------+-------------------------------------------+
53   | ``'w'`` | Open existing database for reading and    |
54   |         | writing                                   |
55   +---------+-------------------------------------------+
56   | ``'c'`` | Open database for reading and writing,    |
57   |         | creating it if it doesn't exist           |
58   +---------+-------------------------------------------+
59   | ``'n'`` | Always create a new, empty database, open |
60   |         | for reading and writing                   |
61   +---------+-------------------------------------------+
62
63   The optional *mode* argument is the Unix mode of the file, used only when the
64   database has to be created.  It defaults to octal ``0o666`` (and will be
65   modified by the prevailing umask).
66
67
68The object returned by :func:`.open` supports the same basic functionality as
69dictionaries; keys and their corresponding values can be stored, retrieved, and
70deleted, and the :keyword:`in` operator and the :meth:`keys` method are
71available, as well as :meth:`get` and :meth:`setdefault`.
72
73.. versionchanged:: 3.2
74   :meth:`get` and :meth:`setdefault` are now available in all database modules.
75
76Key and values are always stored as bytes. This means that when
77strings are used they are implicitly converted to the default encoding before
78being stored.
79
80These objects also support being used in a :keyword:`with` statement, which
81will automatically close them when done.
82
83.. versionchanged:: 3.4
84   Added native support for the context management protocol to the objects
85   returned by :func:`.open`.
86
87The following example records some hostnames and a corresponding title,  and
88then prints out the contents of the database::
89
90   import dbm
91
92   # Open database, creating it if necessary.
93   with dbm.open('cache', 'c') as db:
94
95       # Record some values
96       db[b'hello'] = b'there'
97       db['www.python.org'] = 'Python Website'
98       db['www.cnn.com'] = 'Cable News Network'
99
100       # Note that the keys are considered bytes now.
101       assert db[b'www.python.org'] == b'Python Website'
102       # Notice how the value is now in bytes.
103       assert db['www.cnn.com'] == b'Cable News Network'
104
105       # Often-used methods of the dict interface work too.
106       print(db.get('python.org', b'not present'))
107
108       # Storing a non-string key or value will raise an exception (most
109       # likely a TypeError).
110       db['www.yahoo.com'] = 4
111
112   # db is automatically closed when leaving the with statement.
113
114
115.. seealso::
116
117   Module :mod:`shelve`
118      Persistence module which stores non-string data.
119
120
121The individual submodules are described in the following sections.
122
123
124:mod:`dbm.gnu` --- GNU's reinterpretation of dbm
125------------------------------------------------
126
127.. module:: dbm.gnu
128   :platform: Unix
129   :synopsis: GNU's reinterpretation of dbm.
130
131**Source code:** :source:`Lib/dbm/gnu.py`
132
133--------------
134
135This module is quite similar to the :mod:`dbm` module, but uses the GNU library
136``gdbm`` instead to provide some additional functionality.  Please note that the
137file formats created by :mod:`dbm.gnu` and :mod:`dbm.ndbm` are incompatible.
138
139The :mod:`dbm.gnu` module provides an interface to the GNU DBM library.
140``dbm.gnu.gdbm`` objects behave like mappings (dictionaries), except that keys and
141values are always converted to bytes before storing.  Printing a ``gdbm``
142object doesn't print the
143keys and values, and the :meth:`items` and :meth:`values` methods are not
144supported.
145
146.. exception:: error
147
148   Raised on :mod:`dbm.gnu`-specific errors, such as I/O errors. :exc:`KeyError` is
149   raised for general mapping errors like specifying an incorrect key.
150
151
152.. function:: open(filename[, flag[, mode]])
153
154   Open a ``gdbm`` database and return a :class:`gdbm` object.  The *filename*
155   argument is the name of the database file.
156
157   The optional *flag* argument can be:
158
159   +---------+-------------------------------------------+
160   | Value   | Meaning                                   |
161   +=========+===========================================+
162   | ``'r'`` | Open existing database for reading only   |
163   |         | (default)                                 |
164   +---------+-------------------------------------------+
165   | ``'w'`` | Open existing database for reading and    |
166   |         | writing                                   |
167   +---------+-------------------------------------------+
168   | ``'c'`` | Open database for reading and writing,    |
169   |         | creating it if it doesn't exist           |
170   +---------+-------------------------------------------+
171   | ``'n'`` | Always create a new, empty database, open |
172   |         | for reading and writing                   |
173   +---------+-------------------------------------------+
174
175   The following additional characters may be appended to the flag to control
176   how the database is opened:
177
178   +---------+--------------------------------------------+
179   | Value   | Meaning                                    |
180   +=========+============================================+
181   | ``'f'`` | Open the database in fast mode.  Writes    |
182   |         | to the database will not be synchronized.  |
183   +---------+--------------------------------------------+
184   | ``'s'`` | Synchronized mode. This will cause changes |
185   |         | to the database to be immediately written  |
186   |         | to the file.                               |
187   +---------+--------------------------------------------+
188   | ``'u'`` | Do not lock database.                      |
189   +---------+--------------------------------------------+
190
191   Not all flags are valid for all versions of ``gdbm``.  The module constant
192   :const:`open_flags` is a string of supported flag characters.  The exception
193   :exc:`error` is raised if an invalid flag is specified.
194
195   The optional *mode* argument is the Unix mode of the file, used only when the
196   database has to be created.  It defaults to octal ``0o666``.
197
198   In addition to the dictionary-like methods, ``gdbm`` objects have the
199   following methods:
200
201   .. method:: gdbm.firstkey()
202
203      It's possible to loop over every key in the database using this method  and the
204      :meth:`nextkey` method.  The traversal is ordered by ``gdbm``'s internal
205      hash values, and won't be sorted by the key values.  This method returns
206      the starting key.
207
208   .. method:: gdbm.nextkey(key)
209
210      Returns the key that follows *key* in the traversal.  The following code prints
211      every key in the database ``db``, without having to create a list in memory that
212      contains them all::
213
214         k = db.firstkey()
215         while k != None:
216             print(k)
217             k = db.nextkey(k)
218
219   .. method:: gdbm.reorganize()
220
221      If you have carried out a lot of deletions and would like to shrink the space
222      used by the ``gdbm`` file, this routine will reorganize the database.  ``gdbm``
223      objects will not shorten the length of a database file except by using this
224      reorganization; otherwise, deleted file space will be kept and reused as new
225      (key, value) pairs are added.
226
227   .. method:: gdbm.sync()
228
229      When the database has been opened in fast mode, this method forces any
230      unwritten data to be written to the disk.
231
232   .. method:: gdbm.close()
233
234      Close the ``gdbm`` database.
235
236:mod:`dbm.ndbm` --- Interface based on ndbm
237-------------------------------------------
238
239.. module:: dbm.ndbm
240   :platform: Unix
241   :synopsis: The standard "database" interface, based on ndbm.
242
243**Source code:** :source:`Lib/dbm/ndbm.py`
244
245--------------
246
247The :mod:`dbm.ndbm` module provides an interface to the Unix "(n)dbm" library.
248Dbm objects behave like mappings (dictionaries), except that keys and values are
249always stored as bytes. Printing a ``dbm`` object doesn't print the keys and
250values, and the :meth:`items` and :meth:`values` methods are not supported.
251
252This module can be used with the "classic" ndbm interface or the GNU GDBM
253compatibility interface. On Unix, the :program:`configure` script will attempt
254to locate the appropriate header file to simplify building this module.
255
256.. exception:: error
257
258   Raised on :mod:`dbm.ndbm`-specific errors, such as I/O errors. :exc:`KeyError` is raised
259   for general mapping errors like specifying an incorrect key.
260
261
262.. data:: library
263
264   Name of the ``ndbm`` implementation library used.
265
266
267.. function:: open(filename[, flag[, mode]])
268
269   Open a dbm database and return a ``ndbm`` object.  The *filename* argument is the
270   name of the database file (without the :file:`.dir` or :file:`.pag` extensions).
271
272   The optional *flag* argument must be one of these values:
273
274   +---------+-------------------------------------------+
275   | Value   | Meaning                                   |
276   +=========+===========================================+
277   | ``'r'`` | Open existing database for reading only   |
278   |         | (default)                                 |
279   +---------+-------------------------------------------+
280   | ``'w'`` | Open existing database for reading and    |
281   |         | writing                                   |
282   +---------+-------------------------------------------+
283   | ``'c'`` | Open database for reading and writing,    |
284   |         | creating it if it doesn't exist           |
285   +---------+-------------------------------------------+
286   | ``'n'`` | Always create a new, empty database, open |
287   |         | for reading and writing                   |
288   +---------+-------------------------------------------+
289
290   The optional *mode* argument is the Unix mode of the file, used only when the
291   database has to be created.  It defaults to octal ``0o666`` (and will be
292   modified by the prevailing umask).
293
294   In addition to the dictionary-like methods, ``ndbm`` objects
295   provide the following method:
296
297   .. method:: ndbm.close()
298
299      Close the ``ndbm`` database.
300
301
302:mod:`dbm.dumb` --- Portable DBM implementation
303-----------------------------------------------
304
305.. module:: dbm.dumb
306   :synopsis: Portable implementation of the simple DBM interface.
307
308**Source code:** :source:`Lib/dbm/dumb.py`
309
310.. index:: single: databases
311
312.. note::
313
314   The :mod:`dbm.dumb` module is intended as a last resort fallback for the
315   :mod:`dbm` module when a more robust module is not available. The :mod:`dbm.dumb`
316   module is not written for speed and is not nearly as heavily used as the other
317   database modules.
318
319--------------
320
321The :mod:`dbm.dumb` module provides a persistent dictionary-like interface which
322is written entirely in Python.  Unlike other modules such as :mod:`dbm.gnu` no
323external library is required.  As with other persistent mappings, the keys and
324values are always stored as bytes.
325
326The module defines the following:
327
328
329.. exception:: error
330
331   Raised on :mod:`dbm.dumb`-specific errors, such as I/O errors.  :exc:`KeyError` is
332   raised for general mapping errors like specifying an incorrect key.
333
334
335.. function:: open(filename[, flag[, mode]])
336
337   Open a ``dumbdbm`` database and return a dumbdbm object.  The *filename* argument is
338   the basename of the database file (without any specific extensions).  When a
339   dumbdbm database is created, files with :file:`.dat` and :file:`.dir` extensions
340   are created.
341
342   The optional *flag* argument supports only the semantics of ``'c'``
343   and ``'n'`` values.  Other values will default to database being always
344   opened for update, and will be created if it does not exist.
345
346   The optional *mode* argument is the Unix mode of the file, used only when the
347   database has to be created.  It defaults to octal ``0o666`` (and will be modified
348   by the prevailing umask).
349
350   .. warning::
351      It is possible to crash the Python interpreter when loading a database
352      with a sufficiently large/complex entry due to stack depth limitations in
353      Python's AST compiler.
354
355   .. versionchanged:: 3.5
356      :func:`.open` always creates a new database when the flag has the value
357      ``'n'``.
358
359   .. deprecated-removed:: 3.6 3.8
360      Creating database in ``'r'`` and ``'w'`` modes.  Modifying database in
361      ``'r'`` mode.
362
363   In addition to the methods provided by the
364   :class:`collections.abc.MutableMapping` class, :class:`dumbdbm` objects
365   provide the following methods:
366
367   .. method:: dumbdbm.sync()
368
369      Synchronize the on-disk directory and data files.  This method is called
370      by the :meth:`Shelve.sync` method.
371
372   .. method:: dumbdbm.close()
373
374      Close the ``dumbdbm`` database.
375
376