GeezerVison is showing docs.python.org — dbm — Interfaces to Unix “databases”
dbm — Interfaces to Unix “databases”¶
Source code: Lib/dbm/__init__.py
dbm is a generic interface to variants of the DBM database:
If none of these modules are installed, the
slow-but-simple implementation in module dbm.dumb will be used. There
is a third party interface to
the Oracle Berkeley DB.
Note
None of the underlying modules will automatically shrink the disk space used by
the database file. However, dbm.sqlite3, dbm.gnu and dbm.dumb
provide a reorganize() method that can be used for this purpose.
-
exception dbm.error¶
A tuple containing the exceptions that can be raised by each of the supported
modules, with a unique exception also named dbm.error as the first
item — the latter is used when dbm.error is raised.
-
dbm.whichdb(filename)¶
This function attempts to guess which of the several simple database modules
available — dbm.sqlite3, dbm.gnu, dbm.ndbm,
or dbm.dumb — should be used to open a given file.
Return one of the following values:
None if the file can’t be opened because it’s unreadable or doesn’t exist
the empty string ('') if the file’s format can’t be guessed
a string containing the required module name, such as 'dbm.ndbm' or 'dbm.gnu'
-
dbm.open(file, flag='r', mode=0o666)¶
Open a database and return the corresponding database object.
- Parameters:
file (path-like object) – The database file to open.
If the database file already exists, the whichdb() function is used to
determine its type and the appropriate module is used; if it does not exist,
the first submodule listed above that can be imported is used.
flag (str) –
'r' (default): Open existing database for reading only.
'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.
mode (int) – The Unix file access mode of the file (default: octal 0o666),
used only when the database has to be created.
The object returned by open() supports the basic
functionality of mutable mappings;
keys and their corresponding values can be stored, retrieved, and
deleted, and iteration, the in operator and methods keys(),
get(), setdefault() and clear() are available.
The keys() method returns a list instead of a view object.
The setdefault() method requires two arguments.
Key and values are always stored as bytes. This means that when
strings are used they are implicitly converted to the default encoding before
being stored. For detailed information about accepted types, see
Key and value types.
These objects also support being used in a with statement, which
will automatically close them when done.
Changed in version 3.2: get() and setdefault() methods are now available for all
dbm backends.
Changed in version 3.4: Added native support for the context management protocol to the objects
returned by open().
Changed in version 3.8: Deleting a key from a read-only database raises a database module specific exception
instead of KeyError.
Changed in version 3.13: clear() methods are now available for all dbm backends.
Key and value types¶
The accepted types for keys and values vary by backend. Keys and values are
handled the same way, except where noted below:
Storage format:
All keys and values are stored as bytes objects in the database.
When retrieving, you’ll always get bytes back, regardless of the original
type stored.
Type conversion examples:
db['key'] = 'string' stored as b'string'
db['key'] = bytearray(b'data') stored as b'data'
(dbm.dumb and dbm.sqlite3 only)
db['key'] = 42 stored as b'42' (dbm.sqlite3 only)
db['key'] = 3.14 stored as b'3.14' (dbm.sqlite3 only)
db['key'] = True stored as b'1' (dbm.sqlite3 only)
db['key'] = False stored as b'0' (dbm.sqlite3 only)
db['key'] = memoryview(b'data') stored as b'data'
(dbm.sqlite3 only)
db['key'] = array.array('i', [1, 2, 3]) stored as bytes (for example, on
little-endian: b'\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00')
(dbm.sqlite3 only)
The following example records some hostnames and a corresponding title, and
then prints out the contents of the database:
import dbm
# Open database, creating it if necessary.
with dbm.open('cache', 'c') as db:
# Record some values
db[b'hello'] = b'there'
db['www.python.org'] = 'Python Website'
db['www.cnn.com'] = 'Cable News Network'
# Note that the keys are considered bytes now.
assert db[b'www.python.org'] == b'Python Website'
# Notice how the value is now in bytes.
assert db['www.cnn.com'] == b'Cable News Network'
# Often-used methods of the dict interface work too.
print(db.get('python.org', b'not present'))
# Storing a non-string key or value behavior depends on the backend:
# - Traditional backends (ndbm, gnu, dumb) will raise a TypeError
# - The sqlite3 backend accepts it and converts to bytes
db['www.yahoo.com'] = 4
# db is automatically closed when leaving the with statement.
See also
- Module
shelve Persistence module which stores non-string data.
The individual submodules are described in the following sections.
dbm.sqlite3 — SQLite backend for dbm¶
Source code: Lib/dbm/sqlite3.py
This module uses the standard library sqlite3 module to provide an
SQLite backend for the dbm module.
The files created by dbm.sqlite3 can thus be opened by sqlite3,
or any other SQLite browser, including the SQLite CLI.
-
dbm.sqlite3.open(filename, /, flag='r', mode=0o666)¶
Open an SQLite database.
- Parameters:
filename (path-like object) – The path to the database to be opened.
flag (str) –
'r' (default): Open existing database for reading only.
'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.
mode – The Unix file access mode of the file (default: octal 0o666),
used only when the database has to be created.
The returned database object behaves similar to a mutable mapping,
but the keys() method returns a list, and
the setdefault() method requires two arguments.
It also supports a “closing” context manager via the with keyword.
The following methods are also provided:
-
sqlite3.close()¶
Close the SQLite database.
-
sqlite3.reorganize()¶
If you have carried out a lot of deletions and would like to shrink the space
used on disk, this method will reorganize the database; otherwise, deleted file
space will be kept and reused as new (key, value) pairs are added.
Note
While reorganizing, as much as two times the size of the original database is required
in free disk space. However, be aware that this factor changes for each dbm submodule.
dbm.gnu — GNU database manager¶
Source code: Lib/dbm/gnu.py
The dbm.gnu module provides an interface to the GDBM
library, similar to the dbm.ndbm module, but with additional
functionality like crash tolerance.
Note
The file formats created by dbm.gnu and dbm.ndbm are incompatible
and can not be used interchangeably.
-
exception dbm.gnu.error¶
Raised on dbm.gnu-specific errors, such as I/O errors. KeyError is
raised for general mapping errors like specifying an incorrect key.
-
dbm.gnu.open_flags¶
A string of characters the flag parameter of open() supports.
-
dbm.gnu.open(filename, flag='r', mode=0o666, /)¶
Open a GDBM database and return a gdbm object.
- Parameters:
filename (path-like object) – The database file to open.
flag (str) –
'r' (default): Open existing database for reading only.
'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.
The following additional characters may be appended
to control how the database is opened:
'f': Open the database in fast mode.
Writes to the database will not be synchronized.
's': Synchronized mode.
Changes to the database will be written immediately to the file.
'u': Do not lock database.
Not all flags are valid for all versions of GDBM.
See the open_flags member for a list of supported flag characters.
mode (int) – The Unix file access mode of the file (default: octal 0o666),
used only when the database has to be created.
- Raises:
error – If an invalid flag argument is passed.
gdbm objects behave similar to mutable mappings,
but methods items(), values(), pop(), popitem(),
and update() are not supported,
the keys() method returns a list, and
the setdefault() method requires two arguments.
It also supports a “closing” context manager via the with keyword.
Changed in version 3.2: Added the get() and setdefault() methods.
Changed in version 3.13: Added the clear() method.
The following methods are also provided:
-
gdbm.close()¶
Close the GDBM database.
-
gdbm.firstkey()¶
It’s possible to loop over every key in the database using this method and the
nextkey() method. The traversal is ordered by GDBM’s internal
hash values, and won’t be sorted by the key values. This method returns
the starting key.
-
gdbm.nextkey(key)¶
Returns the key that follows key in the traversal. The following code prints
every key in the database db, without having to create a list in memory that
contains them all:
k = db.firstkey()
while k is not None:
print(k)
k = db.nextkey(k)
-
gdbm.reorganize()¶
If you have carried out a lot of deletions and would like to shrink the space
used by the GDBM file, this routine will reorganize the database. gdbm
objects will not shorten the length of a database file except by using this
reorganization; otherwise, deleted file space will be kept and reused as new
(key, value) pairs are added.
Note
While reorganizing, as much as one time the size of the original database is required
in free disk space. However, be aware that this factor changes for each dbm submodule.
-
gdbm.sync()¶
When the database has been opened in fast mode, this method forces any
unwritten data to be written to the disk.
dbm.ndbm — New Database Manager¶
Source code: Lib/dbm/ndbm.py
The dbm.ndbm module provides an interface to the
NDBM library.
This module can be used with the “classic” NDBM interface or the
GDBM compatibility interface.
Note
The file formats created by dbm.gnu and dbm.ndbm are incompatible
and can not be used interchangeably.
Warning
The NDBM library shipped as part of macOS has an undocumented limitation on the
size of values, which can result in corrupted database files
when storing values larger than this limit. Reading such corrupted files can
result in a hard crash (segmentation fault).
-
exception dbm.ndbm.error¶
Raised on dbm.ndbm-specific errors, such as I/O errors. KeyError is raised
for general mapping errors like specifying an incorrect key.
-
dbm.ndbm.library¶
Name of the NDBM implementation library used.
-
dbm.ndbm.open(filename, flag='r', mode=0o666, /)¶
Open an NDBM database and return an ndbm object.
- Parameters:
filename (path-like object) – The basename of the database file
(without the .dir or .pag extensions).
flag (str) –
'r' (default): Open existing database for reading only.
'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.
mode (int) – The Unix file access mode of the file (default: octal 0o666),
used only when the database has to be created.
ndbm objects behave similar to mutable mappings,
but methods items(), values(), pop(), popitem(),
and update() are not supported,
the keys() method returns a list, and
the setdefault() method requires two arguments.
It also supports a “closing” context manager via the with keyword.
Changed in version 3.2: Added the get() and setdefault() methods.
Changed in version 3.13: Added the clear() method.
The following method is also provided:
-
ndbm.close()¶
Close the NDBM database.
dbm.dumb — Portable DBM implementation¶
Source code: Lib/dbm/dumb.py
Note
The dbm.dumb module is intended as a last resort fallback for the
dbm module when a more robust module is not available. The dbm.dumb
module is not written for speed and is not nearly as heavily used as the other
database modules.
The dbm.dumb module provides a persistent dict-like
interface which is written entirely in Python.
Unlike other dbm backends, such as dbm.gnu, no
external library is required.
The dbm.dumb module defines the following:
-
exception dbm.dumb.error¶
Raised on dbm.dumb-specific errors, such as I/O errors. KeyError is
raised for general mapping errors like specifying an incorrect key.
-
dbm.dumb.open(filename, flag='c', mode=0o666)¶
Open a dbm.dumb database.
- Parameters:
filename – The basename of the database file (without extensions).
A new database creates the following files:
filename.dat
filename.dir
flag (str) –
'r': Open existing database for reading only.
'w': Open existing database for reading and writing.
'c' (default): 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.
mode (int) – The Unix file access mode of the file (default: octal 0o666),
used only when the database has to be created.
Warning
It is possible to crash the Python interpreter when loading a database
with a sufficiently large/complex entry due to stack depth limitations in
Python’s AST compiler.
Warning
dbm.dumb does not support concurrent read/write access. (Multiple
simultaneous read accesses are safe.) When a program has the database open
for writing, no other program should have it open for reading or writing.
Changed in version 3.5: open() always creates a new database when flag is 'n'.
Changed in version 3.8: A database opened read-only if flag is 'r'.
A database is not created if it does not exist if flag is 'r' or 'w'.
The returned database object behaves similar to a mutable mapping,
but the keys() and items() methods return lists, and
the setdefault() method requires two arguments.
It also supports a “closing” context manager via the with keyword.
The following methods are also provided:
-
dumbdbm.close()¶
Close the database.
-
dumbdbm.reorganize()¶
If you have carried out a lot of deletions and would like to shrink the space
used on disk, this method will reorganize the database; otherwise, deleted file
space will not be reused.
Note
While reorganizing, no additional free disk space is required. However, be aware
that this factor changes for each dbm submodule.
-
dumbdbm.sync()¶
Synchronize the on-disk directory and data files. This method is called
by the shelve.Shelf.sync() method.
© Copyright 2001 Python Software Foundation.
This page is licensed under the Python Software Foundation License Version 2.
Examples, recipes, and other code in the documentation are additionally licensed under the Zero Clause BSD License.
See History and License for more information.
The Python Software Foundation is a non-profit corporation.
Please donate.
Last updated on Nov 12, 2026 (08:53 UTC).
Found a bug?
Created using Sphinx 9.1.1.
|