Python Dbm 模块

2024 年 8 月 29 日 | 阅读 16 分钟

在我们的日常生活中,无论是有意还是无意,我们都在与数据库打交道。但事实是,数据库是互联网和互联网上提供的每项服务的组成部分。数据库是存储来自互联网或所提供服务的数据的系统或软件。数据库以行和列的形式存储数据,通常是许多表的集合,使我们能够长时间存储有用的信息。数据库是开发任何软件时的关键组成部分,因为它们为我们提供了以有组织的方式存储数据的选项。根据计算机科学中数据库的官方定义,数据库是一个有组织的、维护良好、结构良好的数据集合,可以进行电子访问。我们甚至无法想象没有数据库的存在,互联网还能成为可能。我们中的许多人可能还没有有意识地使用过数据库,但无意中,我们可能在很多情况下都使用过数据库。数据库有多种类型,每种类型的数据库都设计有某些特定的功能,这些功能被嵌入以执行某些特定的任务。因此,不同类型的数据库根据其功能在不同的领域和组织中使用。

就计算机科学而言,数据库是我们所做或从事的每个项目的必需品。几乎每个开发人员和程序员都使用数据库来以有序的格式存储他们的数据。在单个项目中,根据项目的要求,我们可能需要使用不同类型的数据库。在进行当前开发项目时,我们可以使用多种方法来操作或访问数据库。最流行的方法之一是在程序中使用包或模块,以通过我们当前正在工作的程序或代码直接访问系统中的数据库。但是通过这种方法访问数据库需要在系统中占用大量空间,并会降低系统的运行速度。此外,并非所有编程语言都提供可用于通过程序访问数据库的库或函数。因此,有必要构建一些可以替代我们在编写代码时所需数据库的包。

如今,许多编程语言为我们提供了像数据库管理器一样工作并充当数据库来存储我们程序数据的包和库。使用这类包或模块时,我们不必提供连接任何外部数据库依赖项的链接,这是这类包的最大优势。因此,任何编程语言中充当数据库管理器并在程序中提供数据库环境,以便我们可以在那里存储所有数据的这类包,正在开发人员中变得非常受欢迎。如今,大多数开发人员更喜欢使用这些包,而不是使用那些提供与实际数据库连接的包。在使用数据库管理器包时,我们甚至不需要在我们的系统中安装任何实际的数据库软件。我们可以直接使用这些包,并通过在系统中创建数据库并在其上工作来将数据存储在这些数据库管理器中。许多流行的编程语言都提供这种类型的包,包括 Python。特别说到 Python,它也有一个内置的数据库管理器包,我们可以在 Python 程序中使用它来处理数据库。dbm 模块就是充当数据库管理器的 Python 包,我们可以使用它来处理 Python 程序中提供的数据。因此,在本教程中,我们将更多地了解这个 dbm 模块及其功能。

Python 的 Dbm 模块简介

dbm 模块是 Python 的一个包,它是 Python 的一个数据库库,当我们在程序中使用这个模块时,它充当数据库管理器(DBM)。Python 的 dbm 模块以 DBM 的形式为我们提供了简单的字典接口(我们通常在 Python 程序中处理数据值时使用),并且这个模块通常用于 UNIX 操作系统。尽管这个模块在 UNIX 操作系统上非常普遍,我们也可以在其他操作系统上使用它,比如 Windows 等。与任何数据库的基本功能一样,dbm 模块也以键值对的格式存储数据,这在 Python 中我们通常在字典数据类型下使用。dbm 模块的这种键值字典格式使得从数据库中检索数据变得更加容易。dbm 模块中存储的数据通过一个主键("key")存储在固定大小的块中,这使得使用这个数据库管理器包变得更加容易。

Dbm 包的子模块

Dbm 包内置了许多子模块,用于在数据库中执行不同的功能,我们可以通过在程序中简单地导入 dbm 模块来使用所有这些子模块。我们将在这里简要介绍 dbm 包的这三个子模块,以了解它们。

以下是 dbm 包中用于处理数据库的三种类型的子模块

(1) dbm.dumb: 这是 dbm 包的三个子模块之一,我们可以在可移植的 DBM 实现操作中使用它。

(2) dbm.ndbm: 这是 dbm 包的三个子模块之一,我们用这个子模块来进行需要基于 ndbm 接口的操作。这个子模块用于在 Python 程序中处理数据库时提供基于 ndbm 的接口。

(3) dbm.gnu: dbm.gnu 也是 dbm 包的子模块之一,它用于涉及 GNU 对 dbm 的重新解释的操作。

这是对 dbm 包子模块的简要描述,我们可以根据想用 Python 程序对数据库执行的操作来在 Python 程序中使用这些子模块。

Python 的 Dbm 模块:优点

Python 的 dbm 模块是比常见的数据库包更受欢迎的选择,这些常见的包用于将我们系统中安装的数据库链接到我们正在编写的 Python 程序。与 Python 项目中常用的普通 Python 数据库包相比,dbm 模块提供了多种优势。在我们开始使用 dbm 包之前,我们首先了解一下它的优点。以下是我们在程序中使用 dbm 包时它所提供的优势

(1) 更好的性能

当我们在 Python 程序中使用 dbm 包而不是其他数据库包时,我们可以清楚地观察到性能差异。使用 dbm 模块执行程序和对数据库进行操作要容易得多,因为它本身就是一个数据库管理器包。如果我们使用其他数据库包,我们必须在系统中安装数据库软件才能使用这些包。但 dbm 包的情况并非如此,从而使得使用此模块执行的操作更快、更流畅。使用 dbm 包时性能会提高,因为此包提供了数据库环境,我们可以在不实际安装数据库软件的情况下执行数据库操作。使用 dbm 模块执行程序和数据库操作的速度比其他数据库包更快。

(2) 易于检索数据

使用 dbm 模块创建的数据库中存储的数据是以键值对格式存储的,这使得从数据库中检索数据变得更加容易。因此,当我们处理其他数据库时,访问数据库中存在的信息和数据也变得更容易。这节省了我们花在检索数据上的一些时间,并使数据库操作的执行更快。

(3) 可在多个操作系统上操作

众所周知,dbm 模块是 UNIX 操作系统上最受欢迎的选择,但这并不意味着该模块在其他操作系统上不受支持。dbm 模块可以在不同类型的模块上使用,如 Windows、UNIX、LINUX 等。因此,即使我们想在系统中切换到其他操作系统,我们仍然可以使用该模块访问和处理数据库。该模块的可操作性特性节省了我们通常用于为不同操作系统寻找不同数据库模块的时间。

除了上面列出的 dbm 模块的主要优点外,该模块还有其他一些好处,以下是使用该模块的其他优点列表

(4) 提供类似字典数据类型的简单接口格式,使其更易于使用该模块,

(5) 它是一个数据库管理模块,所以我们不需要安装任何依赖项来使用这个包,还有许多其他优点。

这些是 dbm 模块的优点,这就是为什么 dbm 模块比普通的 Python 数据库包更受欢迎,用于通过 Python 程序执行数据库操作。

Python 的 Dbm 模块:安装

Python 的 dbm 模块是 Python 的内置模块之一,这意味着我们可以直接在本教程实现部分的示例程序中导入该模块。这意味着我们可以直接开始使用 dbm 模块,而无需花费任何额外时间执行该模块的安装过程。为了验证 dbm 模块是否内置于我们的系统中,我们可以在系统的命令提示符 shell 中使用以下 pip 命令安装行

当我们尝试使用上面给出的安装行来安装 dbm 模块时,它会显示“未找到匹配的发行版”,这意味着该模块已经存在于我们的系统中,是一个内置的 Python 模块。我们可以直接开始使用 dbm 模块,并通过在程序中使用以下代码行导入 dbm 模块,在示例程序中使用该模块的函数

当我们在示例程序中使用这行代码时,我们将能够使用这个数据管理器模块,并使用它的函数通过程序创建一个数据库。当程序执行时,将使用这个模块来执行数据库操作。现在,我们可以继续进行这个模块的实现部分,在那里我们将学习如何使用这个模块的函数来执行与数据库相关的操作。

Python 的 Dbm 模块:函数

在我们继续进行 dbm 模块的实现部分之前,我们首先浏览所有主要函数。这将使我们在实现部分的示例程序中更容易使用这些函数,并理解它们在程序中的工作方式。因此,我们将知道应该使用哪个函数来执行特定的数据库操作,以及哪个函数正在执行哪个数据库操作。为了对这个模块的函数有正确的了解,我们还可以了解到使用什么类型的函数可以从数据库中获得特定的结果。现在,我们将学习 dbm 模块的所有主要函数,以便以后我们更容易地使用它们并理解它们的工作。以下是 dbm 模块主要函数的描述

(1) dbm.open()

dbm 模块的 open() 函数通常用于执行以下两个任务

(i) 打开系统中存在的数据库文件

(ii) 通过使用此 open() 函数在程序中创建一个新的数据库

因此,open() 函数成为 dbm 模块所有函数中最受欢迎的函数。除了上述两个任务外,open() 函数还在程序中充当一个起点,所有与数据库相关的操作都可以在此执行。当我们在程序中使用此 open() 函数并在程序中写入数据库名称时,如果系统中存在该数据库,它将打开它;否则,它将创建一个与我们在参数中给出的名称相同的新数据库。

open() 函数的语法

我们可以在示例程序中使用 dbm.open() 函数,通过在函数内部提供数据库的名称作为参数,这样函数就会在程序中打开或创建一个同名数据库。以下是在 Python 程序中使用 dbm 模块的 open() 函数的语法

参数:正如我们所见,上面给出的 open() 函数接受多个参数,其中一些是必需参数,其他是可选参数。以下是可以在此 open() 函数中给出的参数的描述:

(i) fileName: 这个参数是函数的强制参数,用于在函数中打开和创建数据库。我们必须提供我们想要在程序中打开的文件名。如果系统中存在与我们提供的参数同名的文件,函数将在程序中打开它。否则,函数将在系统目录中创建一个具有给定名称的数据库文件,然后在程序中打开该文件。

(ii) flag: 这个参数对于程序来说不是一个强制性参数,但总是建议我们使用它来更具体地说明我们想要执行的数据库操作。我们可以使用 flag 参数来指定与我们在程序中打开的数据库相关的目的。我们可以使用这个参数来更具体地说明我们将在打开的数据库上执行何种操作。flag 接受 'r'、'w'、'c' 或 'n' 作为参数,但一次只能接受其中一个参数。

以下是对 open() 函数 flag 参数内可以给出的参数的描述

  • 'r': 我们定义我们正在以只读权限打开数据库文件。当数据库文件以此参数在程序中打开时,意味着我们只能从文件中读取数据,不能进行任何更改。
  • 'w': 此参数用于指定我们正在以读写权限打开文件。通过给出此参数,我们指定我们可以读取和更改我们正在打开的数据库文件中的数据。
  • 'c': 这是最安全和开放的参数,因为它的参数允许在数据库文件中读写,甚至在系统中不存在具有给定名称的数据库文件时创建一个新的数据库文件。
  • 'n': 当我们必须在系统中创建一个具有给定名称的新数据库文件时,我们必须使用此参数。此参数为我们正在创建和打开的新文件提供读写权限。

这是 open() 函数 'flag' 参数内给定参数的描述。

(iii) mode: 当我们在 UNIX 操作系统中使用 dbm 模块时,会使用 mode 参数,该参数被设置为八进制形式,默认值为 0o666。这是 open() 函数的一个可选参数,在 Windows 上使用 dbm 模块时我们可以省略此参数。

这些都是 dbm 模块的 open() 函数所接受的参数。

(2) dbm.whichdb()

我们可以在程序中打开数据库文件时使用 dbm 模块的 whichdb() 函数,该函数将尝试猜测该文件应使用 dbm 包中可用的哪个数据库模块(dbm.gnu、dbm.ndbm 或 dbm.dumb)打开。我们必须提供我们将在该程序中使用的数据库文件的文件名,然后该函数将猜测用于打开此文件的数据库模块。

whichdb() 函数的语法

我们可以在示例程序中使用 dbm.whichdb() 函数,通过在函数内部提供数据库文件的名称作为参数,以便函数猜测应该使用哪个数据库模块来打开给定的文件。以下是在 Python 程序中使用 dbm 模块的 whichdb() 函数的语法

参数: 正如我们所看到的,上面给出的 whichdb() 函数只接受一个参数,即我们要在程序中打开的文件的名称。

返回类型: 以下是此 whichdb() 函数的一些常见返回类型

(i) 模块名: 将为文件返回所需的模块名,该模块应用于打开其名称已作为 open() 和 which() 函数内部参数给出的文件。

(ii) 注意: 如果其名称在 whichdb() 函数参数内给出的数据库文件在系统目录中不存在,它将在输出中返回 None。

(iii) 空字符串: 这是在特殊情况下返回的,即当给定文件存在于系统中,但函数无法猜测其所需模块名称时。

这是对 dbm 模块两个主要函数的完整描述,我们将在本教程的示例程序中使用它们。除了这两个函数,dbm 模块中还有许多其他函数,用于对我们在程序中打开的数据库文件执行多种数据库操作。

以下是 dbm 模块中所有其他重要函数或方法的简要概述

(1) Close(): 这个函数不接受用户的任何参数,也不会对程序中打开的数据库文件进行任何更改。这个函数仅用于关闭我们在程序中打开的数据库文件。

(2) update(): 我们可以使用 update() 函数作为数据库方法来更新现有的键值对,就像我们在字典对象中执行相同的操作一样。

(3) setdefault(): 我们可以使用这个函数来定义一个默认主键,这个主键是我们在此函数内部作为参数提供的。

(4) get(key): 该函数以键作为参数,并返回我们在程序中打开的数据库文件中与该键关联的相应值。

(5) value(): 我们使用此方法来遍历打开的数据库文件中存在的所有值。

(6) items(): 我们可以使用 items() 函数作为一种方法来遍历我们已打开的数据库文件中存在的所有项目。

(7) keys: 我们使用此方法来遍历打开的数据库文件中存在的所有键。

(8) sync(): 我们可以在程序中对打开的数据库文件使用 sync() 函数,以同步数据文件和磁盘上的目录。

(9) pop(key): 我们使用此函数删除我们在此函数中作为参数提供的键,与给定键关联的值也将从数据库文件中删除。

以上是 dbm 模块中所有其他重要函数的描述,我们可以在 Python 程序中使用它们来对数据库文件执行多种数据库操作。

Python 的 Dbm 模块:实现

我们已经学习了 dbm 模块的所有主要函数及其在 Python 程序中的工作方式。到目前为止,我们已经了解了应该使用哪个 dbm 模块来对数据库文件执行特定操作。在这一部分,我们将学习这些函数在 Python 程序中是如何工作的,并理解 dbm 模块的实现。我们将使用到目前为止所学的函数,在一个我们将在程序内部创建的数据库文件上进行操作,并执行多个数据库操作来理解 dbm 模块的实现。

请看下面的示例程序,我们在其中创建了一个数据库文件,并使用 dbm 模块函数执行了多个数据库操作

输出

The name of the developer we have defined inside the database file:  b'Python Developer from JavaTpoint'
The phone number of the developer we have defined inside the database file:  b'98765432'
The short name of the developer we have defined inside the database file:  b'Python JTP'
The first date for learning of the developer we have defined inside the database file:  b'26/04/2013'

Following data is present in the database file which we have got through the value iteration method: 
b'Python Developer from JavaTpoint'
b'98765432'
b'Python JTP'
b'26/04/2013'

Following data is present in the database file which we have got through the key iteration method: 
b'Name'
b'Mobile'
b'Short name'
b'Date of first learning'

Following data is present in the database file which we have got through the item iteration method: 
b'Name' b'Python Developer from JavaTpoint'
b'Short name' b'Python JTP'
b'Date of first learning' b'26/04/2013'   

正如我们所见,我们在程序中创建了一个数据库文件,并在向文件中添加数据后对文件执行了多项操作。这就是我们如何使用 dbm 模块通过 Python 程序对数据库文件执行多种数据库操作的方法。