Python DBM模块轻松使用小型数据库存储管理数据
作者:数据小郑
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数据库存储管理的资料请关注脚本之家其它相关文章!