Python Dbm 模块
我们每天都会在工作中使用数据库,不论是有意还是无意。但事实是,数据库是互联网和互联网上提供的每一项服务的一个必要组成部分。数据库是存储从互联网或提供的服务中获取的数据的系统或软件。数据库以行和列的形式存储数据,通常是许多表的集合,允许我们长时间存储有用的信息。数据库是任何软件工作时的关键组件,因为它们为我们提供了以有组织的方式存储数据的选项。根据计算机科学中对数据库的官方定义,数据库是一个有组织、良好维护和良好结构化的数据集合,可以通过电子方式访问。我们甚至无法想象互联网在没有数据库存在的情况下是可能的。我们可能尚未有意识地使用过数据库,但可能有很多情况下我们已经使用过数据库。不同类型的数据库具有不同的特性,根据其特性,不同领域和组织使用不同类型的数据库。
说到计算机科学,数据库是我们每个项目的必需品。几乎每个开发人员和程序员都会使用数据库来存储其以整齐排列的数据。在一个项目中工作时,我们可能需要处理不同类型的数据库,以满足项目的需求。在当前的开发项目中,我们可以使用多种方法来处理或访问数据库。其中一个最流行的方法是在程序中使用包或模块来直接访问系统中的数据库。但是通过此方法访问数据库会占用大量系统空间,并降低系统的运行速度。此外,并非所有的编程语言都提供可以用于通过程序访问数据库的库或函数。因此,有必要构建可以作为代码中所需数据库的替代的包。
在当今时代,许多编程语言为我们提供了像数据库管理器一样的包和库,可以作为数据库来存储我们程序的数据。在使用这些包或模块时,我们不必提供连接到任何外部数据库依赖项的链接,这是这些包的最大优势。因此,这些作为数据库管理器的包在开发人员中变得非常受欢迎。在当今时代,大多数开发人员更喜欢使用这些包而不是使用提供与实际数据库连接的包。使用数据库管理器包时,我们甚至不需要在系统中安装任何实际的数据库软件。我们可以直接使用这些包,通过在系统中创建一个数据库并对其进行操作来存储数据。许多流行的编程语言都提供了这种类型的包,包括Python。特别是对于Python,它也有一个内置的数据库管理器包,我们可以在Python程序中使用它来处理数据库。dbm模块是Python的数据库管理器包,我们可以使用它来处理Python程序中提供的数据。因此,在本教程中,我们将更多地了解这个dbm模块及其函数。
Python的Dbm 模块简介
dbm模块是一个Python软件包,它在程序中充当数据库管理器(DBM)。Python的dbm模块以DBM形式为我们提供了简单的字典接口(我们在处理数据值时通常使用的接口),该模块通常在UNIX操作系统中使用。尽管该模块在UNIX操作系统中非常常见,但我们也可以在其他操作系统(如Windows和其他操作系统)上使用该模块。与任何数据库的基本功能一样,dbm模块也以键值对的格式存储数据,这是我们在Python中常用的字典数据类型。dbm模块的键值字典格式使得从数据库检索数据更加容易。dbm模块中存储的数据通过使用固定大小的块中的单个主键(”键”)存储,这使得使用这个数据库管理器软件包更加容易。
Dbm软件包的子模块
Dbm软件包中包含许多子模块,用于在数据库中执行不同的功能,我们只需在程序中导入dbm模块就可以使用所有这些子模块。我们将在此提供对这三个dbm软件包子模块的简要描述,以便更好地理解它们。
以下是处理数据库的dbm软件包中存在的三种类型的子模块:
(1) dbm.dumb: 这是dbm软件包的三个子模块之一,我们可以在可移植的DBM实现操作中使用它。
(2) dbm.ndbm: 这是dbm软件包的三个子模块之一,我们在需要基于ndbm的接口的操作中使用该子模块。该子模块用于提供基于ndbm的接口,以便在Python程序中处理数据库时使用。
(3) dbm.gnu: dbm.gnu也是dbm软件包的其中一个子模块,它用于涉及GNU对dbm的重新解释的操作。
这是dbm软件包子模块的简要描述,我们可以根据在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模块的优点,这就是为什么在使用Python程序执行数据库操作时,dbm模块比常见的Python数据库包更受欢迎的原因。
Python的Dbm模块:安装
Python的dbm模块是Python的内置模块之一,这意味着我们可以直接在本教程的实施部分的示例程序中导入这个模块。这意味着我们可以直接开始使用dbm模块,而不需要花费额外的时间来执行此模块的安装过程。为了验证dbm模块是否在我们的系统中内置存在,我们可以在系统的命令提示符中使用以下pip命令安装行:
pip install dbm
当我们尝试使用上面给出的安装行安装dbm模块时,它会显示“找不到匹配的发行版”,这意味着此模块已经存在于我们的系统中,并且是一个内置的Python模块。我们可以直接开始使用dbm模块并在示例程序中使用此模块的函数,方法是在程序中使用以下代码行导入dbm模块:
# Importing the database manager module
import dbm
当我们在示例程序中使用这行代码时,我们将能够使用这个数据管理器模块并使用其函数通过程序创建一个数据库。当程序执行时,数据库操作将使用该模块执行。现在,我们可以继续实现这个模块的部分,我们将学习如何使用这个模块的函数来执行与数据库相关的操作。
Python的Dbm模块:函数
在我们继续实现dbm模块的部分之前,我们首先要了解所有主要的函数。这将使我们能够在实现部分的示例程序中使用这些函数,并理解它们在程序中的工作方式。因此,我们将知道应该使用哪些函数来执行特定的数据库操作,以及哪个函数执行哪个数据库操作。为了对这个模块的函数有正确的了解,我们也可以对从数据库获得特定结果使用了哪些类型的函数有个概念。现在,我们将学习dbm模块的所有主要函数,以便以后使用它们并理解它们的工作。以下是dbm模块的主要函数的描述:
(1) dbm.open()
dbm模块的open()函数用于执行以下两个常见任务:
(i) 打开系统中存在的数据库文件
(ii) 通过使用此open()函数在程序中创建一个新的数据库
因此,open()函数成为了dbm模块中最受欢迎的函数。除了上述两个任务之外,open()函数还充当了程序中可以执行所有与数据库相关的操作的起点。当我们在程序中使用这个open()函数并在程序中写入一个数据库名称时,如果系统中存在该数据库,则它将打开该数据库;否则,它将使用我们在参数中给定的相同名称创建一个新的数据库。
open()函数的语法:
我们可以在示例程序中使用dbm.open()函数,将数据库名称作为参数提供给函数,这样函数就可以在程序中打开或创建一个同名的数据库。以下是在Python程序中使用dbm模块的open()函数的语法:
>> dbm.open(fileName, flag = 'r', mode = 0o666)
参数:正如我们所看到的,上述的open()函数接受多个参数,其中一些是必需的参数,其他的是可选的。 以下是open()函数中可以给出的参数的描述:
(i) fileName: 这个参数是函数的必需参数,用于打开和创建函数中的数据库。我们必须提供我们想要在程序中打开的文件的名称。如果系统目录中存在与我们提供的参数相同名称的文件,则函数将打开它在程序中。否则,函数将在系统目录中创建一个以给定名称命名的数据库文件,然后打开文件在程序中。
(ii) flag: 这个参数对于程序来说不是必需的,但是建议我们使用它以更具体地指定我们想要执行的数据库操作。我们可以使用flag参数来指定与我们在程序中打开的数据库相关的目的。我们可以使用这个参数来更具体地说明我们将在打开的数据库上执行的操作的类型。flag参数可以接受’r’、’w’、’c’或’n’作为参数,但每次只能接受其中一个参数。
以下是open()函数中flag参数内的参数的描述:
- ‘r’: 我们正在定义我们以只读权限打开数据库文件。当一个数据库文件以这个参数在程序中打开时,这意味着我们只能从文件中读取数据,不能进行任何更改。
- ‘w’: 这个参数用于指定我们以读写权限打开文件。通过给出这个参数,我们指定我们可以在打开的数据库文件中读取和进行更改。
- ‘c’: 这是最安全且开放的参数,因为它允许在数据库文件中读取和写入,并且在系统中不存在给定名称的数据库文件时,甚至可以创建一个新的数据库文件。
- ‘n’: 当我们需要在系统中创建一个具有给定名称的新数据库文件时,我们必须使用这个参数。这个参数提供了对我们在程序中创建和打开的新文件的读取和写入权限。
这是给出在open()函数的’flag’参数内的参数的描述。
(iii) mode: mode参数在我们在UNIX操作系统中使用dbm模块时使用,这个参数设置为八进制形式,默认值为0o666。这是open()函数的可选参数,当在Windows上使用dbm模块时,我们可以省略这个参数。
这些都是dbm模块的open()函数使用的参数。
(2) dbm.whichdb()
我们可以在程序中打开数据库文件时使用dbm模块的whichdb()函数,并且该函数将尝试猜测该文件应该使用dbm包中的哪个数据库模块来打开(dbm.gnu、dbm.ndbm或dbm.dumb)。我们需要提供要在程序中使用的数据库文件的文件名,这个函数将猜测将用于打开此文件的数据库模块。
whichdb()函数的语法
我们可以通过在函数内部提供数据库文件的名称作为参数来在示例程序中使用dbm.whichdb()函数,这样函数将猜测应该使用哪个数据库模块来打开给定的文件。以下是在Python程序中使用dbm模块的whichdb()函数的语法:
>> dbm.whichdb(fileName)
参数: 正如我们所见,上述的whichdb()函数只接受一个参数,该参数是我们在程序中打开的文件的名称。
返回类型: 以下是此whichdb()函数的一些常见返回类型:
(i) 模块名称: 将返回文件的所需模块名称,该模块名称应用于打开作为open()和which()函数参数的文件。
(ii) 注意: 如果whichdb()函数的参数所指定的数据库文件不存在于系统目录中,则输出为none。
(iii) 空字符串: 这是特殊情况下的返回值,当系统中存在给定文件,但该函数无法猜测所需的模块名称时。
这是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模块函数执行了多个数据库操作:
# Importing the database manager module in the program
import dbm
# Creating a new database file with the open() function
newDB = dbm.open('newDBFile', 'n')
# Inserting key value pair data inside the database file
newDB['Name'] = 'Python Developer from JavaTpoint'
newDB['Mobile'] = '98765432'
newDB['Short name'] = 'Python JTP'
newDB['Date of first learning'] = '26/04/2013'
# Printing the data present in the database file we have created
print("The name of the developer we have defined inside the database file: ", newDB.get('Name'))
print("The phone number of the developer we have defined inside the database file: ", newDB.get('Mobile'))
print("The short name of the developer we have defined inside the database file: ", newDB.get('Short name'))
print("The first date for learning of the developer we have defined inside the database file: ", newDB.get('Date of first learning'))
print()
# Using the values() method to print the data present in the database file through iteration
print("Following data is present in the database file which we have got through the value iteration method: ")
for val in newDB.values():
print(val)
print()
# Using the keys() method to print the data present in the database file through iteration
print("Following data is present in the database file which we have got through the key iteration method: ")
for ke in newDB.keys():
print(ke)
print()
# Popping out the key-value pair using the pop() method
newDB.pop('Mobile')
# Now printing the key-value pair using the item() method
print("Following data is present in the database file which we have got through the item iteration method: ")
for ke, val in newDB.items():
print(ke, val)
print()
# Now clearing all the values or data present in the database files
newDB.clear()
# At last, closing the database file
newDB.close()
输出:
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程序中对数据库文件进行多个数据库操作。