17db96d56Sopenharmony_ci:mod:`dbm` --- Interfaces to Unix "databases"
27db96d56Sopenharmony_ci=============================================
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci.. module:: dbm
57db96d56Sopenharmony_ci   :synopsis: Interfaces to various Unix "database" formats.
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci**Source code:** :source:`Lib/dbm/__init__.py`
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ci--------------
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ci:mod:`dbm` is a generic interface to variants of the DBM database ---
127db96d56Sopenharmony_ci:mod:`dbm.gnu` or :mod:`dbm.ndbm`.  If none of these modules is installed, the
137db96d56Sopenharmony_cislow-but-simple implementation in module :mod:`dbm.dumb` will be used.  There
147db96d56Sopenharmony_ciis a `third party interface <https://www.jcea.es/programacion/pybsddb.htm>`_ to
157db96d56Sopenharmony_cithe Oracle Berkeley DB.
167db96d56Sopenharmony_ci
177db96d56Sopenharmony_ci
187db96d56Sopenharmony_ci.. exception:: error
197db96d56Sopenharmony_ci
207db96d56Sopenharmony_ci   A tuple containing the exceptions that can be raised by each of the supported
217db96d56Sopenharmony_ci   modules, with a unique exception also named :exc:`dbm.error` as the first
227db96d56Sopenharmony_ci   item --- the latter is used when :exc:`dbm.error` is raised.
237db96d56Sopenharmony_ci
247db96d56Sopenharmony_ci
257db96d56Sopenharmony_ci.. function:: whichdb(filename)
267db96d56Sopenharmony_ci
277db96d56Sopenharmony_ci   This function attempts to guess which of the several simple database modules
287db96d56Sopenharmony_ci   available --- :mod:`dbm.gnu`, :mod:`dbm.ndbm` or :mod:`dbm.dumb` --- should
297db96d56Sopenharmony_ci   be used to open a given file.
307db96d56Sopenharmony_ci
317db96d56Sopenharmony_ci   Returns one of the following values: ``None`` if the file can't be opened
327db96d56Sopenharmony_ci   because it's unreadable or doesn't exist; the empty string (``''``) if the
337db96d56Sopenharmony_ci   file's format can't be guessed; or a string containing the required module
347db96d56Sopenharmony_ci   name, such as ``'dbm.ndbm'`` or ``'dbm.gnu'``.
357db96d56Sopenharmony_ci
367db96d56Sopenharmony_ci.. versionchanged:: 3.11
377db96d56Sopenharmony_ci   Accepts :term:`path-like object` for filename.
387db96d56Sopenharmony_ci
397db96d56Sopenharmony_ci.. function:: open(file, flag='r', mode=0o666)
407db96d56Sopenharmony_ci
417db96d56Sopenharmony_ci   Open the database file *file* and return a corresponding object.
427db96d56Sopenharmony_ci
437db96d56Sopenharmony_ci   If the database file already exists, the :func:`whichdb` function is used to
447db96d56Sopenharmony_ci   determine its type and the appropriate module is used; if it does not exist,
457db96d56Sopenharmony_ci   the first module listed above that can be imported is used.
467db96d56Sopenharmony_ci
477db96d56Sopenharmony_ci   The optional *flag* argument can be:
487db96d56Sopenharmony_ci
497db96d56Sopenharmony_ci   +---------+-------------------------------------------+
507db96d56Sopenharmony_ci   | Value   | Meaning                                   |
517db96d56Sopenharmony_ci   +=========+===========================================+
527db96d56Sopenharmony_ci   | ``'r'`` | Open existing database for reading only   |
537db96d56Sopenharmony_ci   |         | (default)                                 |
547db96d56Sopenharmony_ci   +---------+-------------------------------------------+
557db96d56Sopenharmony_ci   | ``'w'`` | Open existing database for reading and    |
567db96d56Sopenharmony_ci   |         | writing                                   |
577db96d56Sopenharmony_ci   +---------+-------------------------------------------+
587db96d56Sopenharmony_ci   | ``'c'`` | Open database for reading and writing,    |
597db96d56Sopenharmony_ci   |         | creating it if it doesn't exist           |
607db96d56Sopenharmony_ci   +---------+-------------------------------------------+
617db96d56Sopenharmony_ci   | ``'n'`` | Always create a new, empty database, open |
627db96d56Sopenharmony_ci   |         | for reading and writing                   |
637db96d56Sopenharmony_ci   +---------+-------------------------------------------+
647db96d56Sopenharmony_ci
657db96d56Sopenharmony_ci   The optional *mode* argument is the Unix mode of the file, used only when the
667db96d56Sopenharmony_ci   database has to be created.  It defaults to octal ``0o666`` (and will be
677db96d56Sopenharmony_ci   modified by the prevailing umask).
687db96d56Sopenharmony_ci
697db96d56Sopenharmony_ci
707db96d56Sopenharmony_ciThe object returned by :func:`.open` supports the same basic functionality as
717db96d56Sopenharmony_cidictionaries; keys and their corresponding values can be stored, retrieved, and
727db96d56Sopenharmony_cideleted, and the :keyword:`in` operator and the :meth:`keys` method are
737db96d56Sopenharmony_ciavailable, as well as :meth:`get` and :meth:`setdefault`.
747db96d56Sopenharmony_ci
757db96d56Sopenharmony_ci.. versionchanged:: 3.2
767db96d56Sopenharmony_ci   :meth:`get` and :meth:`setdefault` are now available in all database modules.
777db96d56Sopenharmony_ci
787db96d56Sopenharmony_ci.. versionchanged:: 3.8
797db96d56Sopenharmony_ci   Deleting a key from a read-only database raises database module specific error
807db96d56Sopenharmony_ci   instead of :exc:`KeyError`.
817db96d56Sopenharmony_ci
827db96d56Sopenharmony_ci.. versionchanged:: 3.11
837db96d56Sopenharmony_ci   Accepts :term:`path-like object` for file.
847db96d56Sopenharmony_ci
857db96d56Sopenharmony_ciKey and values are always stored as bytes. This means that when
867db96d56Sopenharmony_cistrings are used they are implicitly converted to the default encoding before
877db96d56Sopenharmony_cibeing stored.
887db96d56Sopenharmony_ci
897db96d56Sopenharmony_ciThese objects also support being used in a :keyword:`with` statement, which
907db96d56Sopenharmony_ciwill automatically close them when done.
917db96d56Sopenharmony_ci
927db96d56Sopenharmony_ci.. versionchanged:: 3.4
937db96d56Sopenharmony_ci   Added native support for the context management protocol to the objects
947db96d56Sopenharmony_ci   returned by :func:`.open`.
957db96d56Sopenharmony_ci
967db96d56Sopenharmony_ciThe following example records some hostnames and a corresponding title,  and
977db96d56Sopenharmony_cithen prints out the contents of the database::
987db96d56Sopenharmony_ci
997db96d56Sopenharmony_ci   import dbm
1007db96d56Sopenharmony_ci
1017db96d56Sopenharmony_ci   # Open database, creating it if necessary.
1027db96d56Sopenharmony_ci   with dbm.open('cache', 'c') as db:
1037db96d56Sopenharmony_ci
1047db96d56Sopenharmony_ci       # Record some values
1057db96d56Sopenharmony_ci       db[b'hello'] = b'there'
1067db96d56Sopenharmony_ci       db['www.python.org'] = 'Python Website'
1077db96d56Sopenharmony_ci       db['www.cnn.com'] = 'Cable News Network'
1087db96d56Sopenharmony_ci
1097db96d56Sopenharmony_ci       # Note that the keys are considered bytes now.
1107db96d56Sopenharmony_ci       assert db[b'www.python.org'] == b'Python Website'
1117db96d56Sopenharmony_ci       # Notice how the value is now in bytes.
1127db96d56Sopenharmony_ci       assert db['www.cnn.com'] == b'Cable News Network'
1137db96d56Sopenharmony_ci
1147db96d56Sopenharmony_ci       # Often-used methods of the dict interface work too.
1157db96d56Sopenharmony_ci       print(db.get('python.org', b'not present'))
1167db96d56Sopenharmony_ci
1177db96d56Sopenharmony_ci       # Storing a non-string key or value will raise an exception (most
1187db96d56Sopenharmony_ci       # likely a TypeError).
1197db96d56Sopenharmony_ci       db['www.yahoo.com'] = 4
1207db96d56Sopenharmony_ci
1217db96d56Sopenharmony_ci   # db is automatically closed when leaving the with statement.
1227db96d56Sopenharmony_ci
1237db96d56Sopenharmony_ci
1247db96d56Sopenharmony_ci.. seealso::
1257db96d56Sopenharmony_ci
1267db96d56Sopenharmony_ci   Module :mod:`shelve`
1277db96d56Sopenharmony_ci      Persistence module which stores non-string data.
1287db96d56Sopenharmony_ci
1297db96d56Sopenharmony_ci
1307db96d56Sopenharmony_ciThe individual submodules are described in the following sections.
1317db96d56Sopenharmony_ci
1327db96d56Sopenharmony_ci
1337db96d56Sopenharmony_ci:mod:`dbm.gnu` --- GNU's reinterpretation of dbm
1347db96d56Sopenharmony_ci------------------------------------------------
1357db96d56Sopenharmony_ci
1367db96d56Sopenharmony_ci.. module:: dbm.gnu
1377db96d56Sopenharmony_ci   :platform: Unix
1387db96d56Sopenharmony_ci   :synopsis: GNU's reinterpretation of dbm.
1397db96d56Sopenharmony_ci
1407db96d56Sopenharmony_ci**Source code:** :source:`Lib/dbm/gnu.py`
1417db96d56Sopenharmony_ci
1427db96d56Sopenharmony_ci--------------
1437db96d56Sopenharmony_ci
1447db96d56Sopenharmony_ciThis module is quite similar to the :mod:`dbm` module, but uses the GNU library
1457db96d56Sopenharmony_ci``gdbm`` instead to provide some additional functionality.  Please note that the
1467db96d56Sopenharmony_cifile formats created by :mod:`dbm.gnu` and :mod:`dbm.ndbm` are incompatible.
1477db96d56Sopenharmony_ci
1487db96d56Sopenharmony_ciThe :mod:`dbm.gnu` module provides an interface to the GNU DBM library.
1497db96d56Sopenharmony_ci``dbm.gnu.gdbm`` objects behave like mappings (dictionaries), except that keys and
1507db96d56Sopenharmony_civalues are always converted to bytes before storing.  Printing a ``gdbm``
1517db96d56Sopenharmony_ciobject doesn't print the
1527db96d56Sopenharmony_cikeys and values, and the :meth:`items` and :meth:`values` methods are not
1537db96d56Sopenharmony_cisupported.
1547db96d56Sopenharmony_ci
1557db96d56Sopenharmony_ci.. exception:: error
1567db96d56Sopenharmony_ci
1577db96d56Sopenharmony_ci   Raised on :mod:`dbm.gnu`-specific errors, such as I/O errors. :exc:`KeyError` is
1587db96d56Sopenharmony_ci   raised for general mapping errors like specifying an incorrect key.
1597db96d56Sopenharmony_ci
1607db96d56Sopenharmony_ci
1617db96d56Sopenharmony_ci.. function:: open(filename[, flag[, mode]])
1627db96d56Sopenharmony_ci
1637db96d56Sopenharmony_ci   Open a ``gdbm`` database and return a :class:`gdbm` object.  The *filename*
1647db96d56Sopenharmony_ci   argument is the name of the database file.
1657db96d56Sopenharmony_ci
1667db96d56Sopenharmony_ci   The optional *flag* argument can be:
1677db96d56Sopenharmony_ci
1687db96d56Sopenharmony_ci   +---------+-------------------------------------------+
1697db96d56Sopenharmony_ci   | Value   | Meaning                                   |
1707db96d56Sopenharmony_ci   +=========+===========================================+
1717db96d56Sopenharmony_ci   | ``'r'`` | Open existing database for reading only   |
1727db96d56Sopenharmony_ci   |         | (default)                                 |
1737db96d56Sopenharmony_ci   +---------+-------------------------------------------+
1747db96d56Sopenharmony_ci   | ``'w'`` | Open existing database for reading and    |
1757db96d56Sopenharmony_ci   |         | writing                                   |
1767db96d56Sopenharmony_ci   +---------+-------------------------------------------+
1777db96d56Sopenharmony_ci   | ``'c'`` | Open database for reading and writing,    |
1787db96d56Sopenharmony_ci   |         | creating it if it doesn't exist           |
1797db96d56Sopenharmony_ci   +---------+-------------------------------------------+
1807db96d56Sopenharmony_ci   | ``'n'`` | Always create a new, empty database, open |
1817db96d56Sopenharmony_ci   |         | for reading and writing                   |
1827db96d56Sopenharmony_ci   +---------+-------------------------------------------+
1837db96d56Sopenharmony_ci
1847db96d56Sopenharmony_ci   The following additional characters may be appended to the flag to control
1857db96d56Sopenharmony_ci   how the database is opened:
1867db96d56Sopenharmony_ci
1877db96d56Sopenharmony_ci   +---------+--------------------------------------------+
1887db96d56Sopenharmony_ci   | Value   | Meaning                                    |
1897db96d56Sopenharmony_ci   +=========+============================================+
1907db96d56Sopenharmony_ci   | ``'f'`` | Open the database in fast mode.  Writes    |
1917db96d56Sopenharmony_ci   |         | to the database will not be synchronized.  |
1927db96d56Sopenharmony_ci   +---------+--------------------------------------------+
1937db96d56Sopenharmony_ci   | ``'s'`` | Synchronized mode. This will cause changes |
1947db96d56Sopenharmony_ci   |         | to the database to be immediately written  |
1957db96d56Sopenharmony_ci   |         | to the file.                               |
1967db96d56Sopenharmony_ci   +---------+--------------------------------------------+
1977db96d56Sopenharmony_ci   | ``'u'`` | Do not lock database.                      |
1987db96d56Sopenharmony_ci   +---------+--------------------------------------------+
1997db96d56Sopenharmony_ci
2007db96d56Sopenharmony_ci   Not all flags are valid for all versions of ``gdbm``.  The module constant
2017db96d56Sopenharmony_ci   :const:`open_flags` is a string of supported flag characters.  The exception
2027db96d56Sopenharmony_ci   :exc:`error` is raised if an invalid flag is specified.
2037db96d56Sopenharmony_ci
2047db96d56Sopenharmony_ci   The optional *mode* argument is the Unix mode of the file, used only when the
2057db96d56Sopenharmony_ci   database has to be created.  It defaults to octal ``0o666``.
2067db96d56Sopenharmony_ci
2077db96d56Sopenharmony_ci   In addition to the dictionary-like methods, ``gdbm`` objects have the
2087db96d56Sopenharmony_ci   following methods:
2097db96d56Sopenharmony_ci
2107db96d56Sopenharmony_ci   .. versionchanged:: 3.11
2117db96d56Sopenharmony_ci      Accepts :term:`path-like object` for filename.
2127db96d56Sopenharmony_ci
2137db96d56Sopenharmony_ci   .. method:: gdbm.firstkey()
2147db96d56Sopenharmony_ci
2157db96d56Sopenharmony_ci      It's possible to loop over every key in the database using this method  and the
2167db96d56Sopenharmony_ci      :meth:`nextkey` method.  The traversal is ordered by ``gdbm``'s internal
2177db96d56Sopenharmony_ci      hash values, and won't be sorted by the key values.  This method returns
2187db96d56Sopenharmony_ci      the starting key.
2197db96d56Sopenharmony_ci
2207db96d56Sopenharmony_ci   .. method:: gdbm.nextkey(key)
2217db96d56Sopenharmony_ci
2227db96d56Sopenharmony_ci      Returns the key that follows *key* in the traversal.  The following code prints
2237db96d56Sopenharmony_ci      every key in the database ``db``, without having to create a list in memory that
2247db96d56Sopenharmony_ci      contains them all::
2257db96d56Sopenharmony_ci
2267db96d56Sopenharmony_ci         k = db.firstkey()
2277db96d56Sopenharmony_ci         while k is not None:
2287db96d56Sopenharmony_ci             print(k)
2297db96d56Sopenharmony_ci             k = db.nextkey(k)
2307db96d56Sopenharmony_ci
2317db96d56Sopenharmony_ci   .. method:: gdbm.reorganize()
2327db96d56Sopenharmony_ci
2337db96d56Sopenharmony_ci      If you have carried out a lot of deletions and would like to shrink the space
2347db96d56Sopenharmony_ci      used by the ``gdbm`` file, this routine will reorganize the database.  ``gdbm``
2357db96d56Sopenharmony_ci      objects will not shorten the length of a database file except by using this
2367db96d56Sopenharmony_ci      reorganization; otherwise, deleted file space will be kept and reused as new
2377db96d56Sopenharmony_ci      (key, value) pairs are added.
2387db96d56Sopenharmony_ci
2397db96d56Sopenharmony_ci   .. method:: gdbm.sync()
2407db96d56Sopenharmony_ci
2417db96d56Sopenharmony_ci      When the database has been opened in fast mode, this method forces any
2427db96d56Sopenharmony_ci      unwritten data to be written to the disk.
2437db96d56Sopenharmony_ci
2447db96d56Sopenharmony_ci   .. method:: gdbm.close()
2457db96d56Sopenharmony_ci
2467db96d56Sopenharmony_ci      Close the ``gdbm`` database.
2477db96d56Sopenharmony_ci
2487db96d56Sopenharmony_ci:mod:`dbm.ndbm` --- Interface based on ndbm
2497db96d56Sopenharmony_ci-------------------------------------------
2507db96d56Sopenharmony_ci
2517db96d56Sopenharmony_ci.. module:: dbm.ndbm
2527db96d56Sopenharmony_ci   :platform: Unix
2537db96d56Sopenharmony_ci   :synopsis: The standard "database" interface, based on ndbm.
2547db96d56Sopenharmony_ci
2557db96d56Sopenharmony_ci**Source code:** :source:`Lib/dbm/ndbm.py`
2567db96d56Sopenharmony_ci
2577db96d56Sopenharmony_ci--------------
2587db96d56Sopenharmony_ci
2597db96d56Sopenharmony_ciThe :mod:`dbm.ndbm` module provides an interface to the Unix "(n)dbm" library.
2607db96d56Sopenharmony_ciDbm objects behave like mappings (dictionaries), except that keys and values are
2617db96d56Sopenharmony_cialways stored as bytes. Printing a ``dbm`` object doesn't print the keys and
2627db96d56Sopenharmony_civalues, and the :meth:`items` and :meth:`values` methods are not supported.
2637db96d56Sopenharmony_ci
2647db96d56Sopenharmony_ciThis module can be used with the "classic" ndbm interface or the GNU GDBM
2657db96d56Sopenharmony_cicompatibility interface. On Unix, the :program:`configure` script will attempt
2667db96d56Sopenharmony_cito locate the appropriate header file to simplify building this module.
2677db96d56Sopenharmony_ci
2687db96d56Sopenharmony_ci.. exception:: error
2697db96d56Sopenharmony_ci
2707db96d56Sopenharmony_ci   Raised on :mod:`dbm.ndbm`-specific errors, such as I/O errors. :exc:`KeyError` is raised
2717db96d56Sopenharmony_ci   for general mapping errors like specifying an incorrect key.
2727db96d56Sopenharmony_ci
2737db96d56Sopenharmony_ci
2747db96d56Sopenharmony_ci.. data:: library
2757db96d56Sopenharmony_ci
2767db96d56Sopenharmony_ci   Name of the ``ndbm`` implementation library used.
2777db96d56Sopenharmony_ci
2787db96d56Sopenharmony_ci
2797db96d56Sopenharmony_ci.. function:: open(filename[, flag[, mode]])
2807db96d56Sopenharmony_ci
2817db96d56Sopenharmony_ci   Open a dbm database and return a ``ndbm`` object.  The *filename* argument is the
2827db96d56Sopenharmony_ci   name of the database file (without the :file:`.dir` or :file:`.pag` extensions).
2837db96d56Sopenharmony_ci
2847db96d56Sopenharmony_ci   The optional *flag* argument must be one of these values:
2857db96d56Sopenharmony_ci
2867db96d56Sopenharmony_ci   +---------+-------------------------------------------+
2877db96d56Sopenharmony_ci   | Value   | Meaning                                   |
2887db96d56Sopenharmony_ci   +=========+===========================================+
2897db96d56Sopenharmony_ci   | ``'r'`` | Open existing database for reading only   |
2907db96d56Sopenharmony_ci   |         | (default)                                 |
2917db96d56Sopenharmony_ci   +---------+-------------------------------------------+
2927db96d56Sopenharmony_ci   | ``'w'`` | Open existing database for reading and    |
2937db96d56Sopenharmony_ci   |         | writing                                   |
2947db96d56Sopenharmony_ci   +---------+-------------------------------------------+
2957db96d56Sopenharmony_ci   | ``'c'`` | Open database for reading and writing,    |
2967db96d56Sopenharmony_ci   |         | creating it if it doesn't exist           |
2977db96d56Sopenharmony_ci   +---------+-------------------------------------------+
2987db96d56Sopenharmony_ci   | ``'n'`` | Always create a new, empty database, open |
2997db96d56Sopenharmony_ci   |         | for reading and writing                   |
3007db96d56Sopenharmony_ci   +---------+-------------------------------------------+
3017db96d56Sopenharmony_ci
3027db96d56Sopenharmony_ci   The optional *mode* argument is the Unix mode of the file, used only when the
3037db96d56Sopenharmony_ci   database has to be created.  It defaults to octal ``0o666`` (and will be
3047db96d56Sopenharmony_ci   modified by the prevailing umask).
3057db96d56Sopenharmony_ci
3067db96d56Sopenharmony_ci   In addition to the dictionary-like methods, ``ndbm`` objects
3077db96d56Sopenharmony_ci   provide the following method:
3087db96d56Sopenharmony_ci
3097db96d56Sopenharmony_ci   .. versionchanged:: 3.11
3107db96d56Sopenharmony_ci      Accepts :term:`path-like object` for filename.
3117db96d56Sopenharmony_ci
3127db96d56Sopenharmony_ci   .. method:: ndbm.close()
3137db96d56Sopenharmony_ci
3147db96d56Sopenharmony_ci      Close the ``ndbm`` database.
3157db96d56Sopenharmony_ci
3167db96d56Sopenharmony_ci
3177db96d56Sopenharmony_ci:mod:`dbm.dumb` --- Portable DBM implementation
3187db96d56Sopenharmony_ci-----------------------------------------------
3197db96d56Sopenharmony_ci
3207db96d56Sopenharmony_ci.. module:: dbm.dumb
3217db96d56Sopenharmony_ci   :synopsis: Portable implementation of the simple DBM interface.
3227db96d56Sopenharmony_ci
3237db96d56Sopenharmony_ci**Source code:** :source:`Lib/dbm/dumb.py`
3247db96d56Sopenharmony_ci
3257db96d56Sopenharmony_ci.. index:: single: databases
3267db96d56Sopenharmony_ci
3277db96d56Sopenharmony_ci.. note::
3287db96d56Sopenharmony_ci
3297db96d56Sopenharmony_ci   The :mod:`dbm.dumb` module is intended as a last resort fallback for the
3307db96d56Sopenharmony_ci   :mod:`dbm` module when a more robust module is not available. The :mod:`dbm.dumb`
3317db96d56Sopenharmony_ci   module is not written for speed and is not nearly as heavily used as the other
3327db96d56Sopenharmony_ci   database modules.
3337db96d56Sopenharmony_ci
3347db96d56Sopenharmony_ci--------------
3357db96d56Sopenharmony_ci
3367db96d56Sopenharmony_ciThe :mod:`dbm.dumb` module provides a persistent dictionary-like interface which
3377db96d56Sopenharmony_ciis written entirely in Python.  Unlike other modules such as :mod:`dbm.gnu` no
3387db96d56Sopenharmony_ciexternal library is required.  As with other persistent mappings, the keys and
3397db96d56Sopenharmony_civalues are always stored as bytes.
3407db96d56Sopenharmony_ci
3417db96d56Sopenharmony_ciThe module defines the following:
3427db96d56Sopenharmony_ci
3437db96d56Sopenharmony_ci
3447db96d56Sopenharmony_ci.. exception:: error
3457db96d56Sopenharmony_ci
3467db96d56Sopenharmony_ci   Raised on :mod:`dbm.dumb`-specific errors, such as I/O errors.  :exc:`KeyError` is
3477db96d56Sopenharmony_ci   raised for general mapping errors like specifying an incorrect key.
3487db96d56Sopenharmony_ci
3497db96d56Sopenharmony_ci
3507db96d56Sopenharmony_ci.. function:: open(filename[, flag[, mode]])
3517db96d56Sopenharmony_ci
3527db96d56Sopenharmony_ci   Open a ``dumbdbm`` database and return a dumbdbm object.  The *filename* argument is
3537db96d56Sopenharmony_ci   the basename of the database file (without any specific extensions).  When a
3547db96d56Sopenharmony_ci   dumbdbm database is created, files with :file:`.dat` and :file:`.dir` extensions
3557db96d56Sopenharmony_ci   are created.
3567db96d56Sopenharmony_ci
3577db96d56Sopenharmony_ci   The optional *flag* argument can be:
3587db96d56Sopenharmony_ci
3597db96d56Sopenharmony_ci   +---------+-------------------------------------------+
3607db96d56Sopenharmony_ci   | Value   | Meaning                                   |
3617db96d56Sopenharmony_ci   +=========+===========================================+
3627db96d56Sopenharmony_ci   | ``'r'`` | Open existing database for reading only   |
3637db96d56Sopenharmony_ci   |         | (default)                                 |
3647db96d56Sopenharmony_ci   +---------+-------------------------------------------+
3657db96d56Sopenharmony_ci   | ``'w'`` | Open existing database for reading and    |
3667db96d56Sopenharmony_ci   |         | writing                                   |
3677db96d56Sopenharmony_ci   +---------+-------------------------------------------+
3687db96d56Sopenharmony_ci   | ``'c'`` | Open database for reading and writing,    |
3697db96d56Sopenharmony_ci   |         | creating it if it doesn't exist           |
3707db96d56Sopenharmony_ci   +---------+-------------------------------------------+
3717db96d56Sopenharmony_ci   | ``'n'`` | Always create a new, empty database, open |
3727db96d56Sopenharmony_ci   |         | for reading and writing                   |
3737db96d56Sopenharmony_ci   +---------+-------------------------------------------+
3747db96d56Sopenharmony_ci
3757db96d56Sopenharmony_ci   The optional *mode* argument is the Unix mode of the file, used only when the
3767db96d56Sopenharmony_ci   database has to be created.  It defaults to octal ``0o666`` (and will be modified
3777db96d56Sopenharmony_ci   by the prevailing umask).
3787db96d56Sopenharmony_ci
3797db96d56Sopenharmony_ci   .. warning::
3807db96d56Sopenharmony_ci      It is possible to crash the Python interpreter when loading a database
3817db96d56Sopenharmony_ci      with a sufficiently large/complex entry due to stack depth limitations in
3827db96d56Sopenharmony_ci      Python's AST compiler.
3837db96d56Sopenharmony_ci
3847db96d56Sopenharmony_ci   .. versionchanged:: 3.5
3857db96d56Sopenharmony_ci      :func:`.open` always creates a new database when the flag has the value
3867db96d56Sopenharmony_ci      ``'n'``.
3877db96d56Sopenharmony_ci
3887db96d56Sopenharmony_ci   .. versionchanged:: 3.8
3897db96d56Sopenharmony_ci      A database opened with flags ``'r'`` is now read-only.  Opening with
3907db96d56Sopenharmony_ci      flags ``'r'`` and ``'w'`` no longer creates a database if it does not
3917db96d56Sopenharmony_ci      exist.
3927db96d56Sopenharmony_ci
3937db96d56Sopenharmony_ci   .. versionchanged:: 3.11
3947db96d56Sopenharmony_ci      Accepts :term:`path-like object` for filename.
3957db96d56Sopenharmony_ci
3967db96d56Sopenharmony_ci   In addition to the methods provided by the
3977db96d56Sopenharmony_ci   :class:`collections.abc.MutableMapping` class, :class:`dumbdbm` objects
3987db96d56Sopenharmony_ci   provide the following methods:
3997db96d56Sopenharmony_ci
4007db96d56Sopenharmony_ci   .. method:: dumbdbm.sync()
4017db96d56Sopenharmony_ci
4027db96d56Sopenharmony_ci      Synchronize the on-disk directory and data files.  This method is called
4037db96d56Sopenharmony_ci      by the :meth:`Shelve.sync` method.
4047db96d56Sopenharmony_ci
4057db96d56Sopenharmony_ci   .. method:: dumbdbm.close()
4067db96d56Sopenharmony_ci
4077db96d56Sopenharmony_ci      Close the ``dumbdbm`` database.
4087db96d56Sopenharmony_ci
409