python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python DBM数据库存储管理

Python DBM模块轻松使用小型数据库存储管理数据

作者:数据小郑

这篇文章主要介绍了Python DBM模块轻松使用小型数据库存储管理数据,它可以让你轻松地存储和管理键值对数据,可以使用 dbm 模块来操作 DBM 文件,或者使用 shelve 模块来存储任意类型的 Python 对象

Python dbm模块

Python 是一门非常强大和灵活的编程语言,它拥有丰富的标准库,提供了各种各样的功能和工具。其中,有一个模块可能很多人不太熟悉,那就是 dbm 模块。dbm 模块其实是一个接口,它可以让你使用 Python 自带的小型数据库,也就是 DBM 文件系统。

DBM(DataBase Manager)是一种文件系统,专门用于键值对的存储,最初是在 Unix 平台实现,现在其它平台也可以用。对于 KV 模型,DBM 提供了一个轻量级、高效的存储解决方案。总的来说,DBM 具有如下特点:

简单快速:非常简单易用,读取和写入操作都很快,适合存储少量数据。

键值对存储:数据是以键值对形式存储的,你可以像操作 Python 字典一样。

文件存储:数据存在具体的文件中,可以轻松地备份和转移。

不支持复杂查询:如果需要执行复杂查询或需要关系型数据库的功能,DBM 可能不是一个好选择。

而 Python 标准库提供了一个 dbm 模块,它实现了 DBM 文件系统的功能,本文来看一下它的用法和拓展应用。

如何使用dmb模块

要使用 dbm 模块,首先需要导入它:

import dbm

然后,可以使用 dbm.open(filename, flag) 函数来打开一个 DBM 文件,或者创建一个新的 DBM 文件。

filename 参数是想要打开或者创建的 DBM 文件的名称,flag 参数是想要以什么模式打开或者创建 DBM 文件,它可以是以下几种值:

'r':只读模式,如果文件不存在,会抛出异常。

'w':读写模式,如果文件不存在,会创建一个新文件。

'c':读写模式,如果文件不存在,会创建一个新文件。

'n':读写模式,如果文件存在,会覆盖原来的内容,如果文件不存在,会创建一个新文件。

打开 DBM 文件后,可以像操作字典一样,使用 db[key] = value 来存储数据,或者使用 value = db[key] 来读取数据。也可以使用 db.keys() 来获取所有的键,或者使用 db.values() 来获取所有的值。还可以使用 db.close() 来关闭文件,或者使用 with 语句来自动关闭文件。

初级案例应用

下面是一个简单的示例,展示了如何使用 dbm 模块来存储和读取一些学生的成绩信息:

import dbm
# 创建一个新的 DBM 文件,存储一些学生的成绩
with dbm.open('scores.db', 'n') as db:
db['Alice'] = '90'
db['Bob'] = '80'
db['Charlie'] = '85'
# 打开已有的 DBM 文件,读取一些学生的成绩
with dbm.open('scores.db', 'r') as db:
print(db['Alice']) # 输出 90
print(db['Bob']) # 输出 80
print(db['Charlie']) # 输出 85
print(db.keys()) # 输出 [b'Alice', b'Bob', b'Charlie']
print(db.values()) # 输出 [b'90', b'80', b'85']

需要注意的是,DBM 文件只能存储字符串或者字节类型的数据,如果想存储其他类型的数据,比如数字、列表、字典等,需要先将它们转换成字符串或者字节类型,然后再存储。

可以使用 str.encode() 和 str.decode() 函数来进行转换,或者使用 pickle 模块来进行序列化和反序列化。

进阶案例应用

如果觉得 dbm 模块的功能还不够强大,或者想存储更复杂的 Python 对象,可以使用 shelve 模块。

shelve 模块是一个基于 dbm 模块的高级接口,它可以存储任意类型的 Python 对象,而不需要进行转换或者序列化。shelve 模块的用法和 dbm 模块非常类似:

只需要用 shelve.open(filename, flag) 来打开一个 DBM 文件,然后就可以像操作字典一样,使用 db[key] = value 来存储数据,或者使用 value = db[key] 来读取数据。

下面是一个简单的示例,展示了如何使用 shelve 模块来存储和读取一些学生的信息,包括姓名、年龄和成绩:

import shelve
# 创建一个新的 DBM 文件,存储一些学生的信息
with shelve.open('students.db', 'n') as db:
db['Alice'] = {'name': 'Alice', 'age': 18, 'score': 90}
db['Bob'] = {'name': 'Bob', 'age': 19, 'score': 80}
db['Charlie'] = {'name': 'Charlie', 'age': 20, 'score': 85}
# 打开已有的 DBM 文件,读取一些学生的信息
with shelve.open('students.db', 'r') as db:
print(db['Alice']) # 输出 {'name': 'Alice', 'age': 18, 'score': 90}
print(db['Bob']) # 输出 {'name': 'Bob', 'age': 19, 'score': 80}
print(db['Charlie']) # 输出 {'name': 'Charlie', 'age': 20, 'score': 85}
print(db.keys()) # 输出 KeysView(<shelve.DbfilenameShelf object at 0x000001F8A5B9A4C0>)
print(db.values()) # 输出 ValuesView(<shelve.DbfilenameShelf object at 0x000001F8A5B9A4C0>)

可以看到,shelve 模块可以存储和读取复杂的 Python 对象,而不需要进行任何转换。

但是,shelve 模块也有一些限制,比如说,不能修改已经存储的对象的属性,只能重新赋值一个新的对象。

以上就是Python DBM模块轻松使用小型数据库存储管理数据的详细内容,更多关于Python DBM数据库存储管理的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文