dbmDBM(DataBase Manager)是一种文件系统 , 专门用于键值对的存储,最初是在 Unix 平台实现,现在其它平台也可以用 。对于 KV 模型,DBM 提供了一个轻量级、高效的存储解决方案 。总的来说,DBM 具有如下特点:
- 简单快速:非常简单易用,读取和写入操作都很快 , 适合存储少量数据 。
- 键值对存储:数据是以键值对形式存储的,你可以像操作 Python/ target=_blank class=infotextkey>Python 字典一样 。
- 文件存储:数据存在具体的文件中,可以轻松地备份和转移 。
- 不支持复杂查询:如果需要执行复杂查询或需要关系型数据库的功能 , DBM 可能不是一个好选择 。
import dbm# 第一个参数是文件名# 第二个参数是模式,有以下几种# r:只读,要求文件必须存在,默认就是这个模式# w:可读可写 , 要求文件必须存在# c:可读可写,文件不存在会创建,存在则追加# n:可读可写,文件不存在会创建,存在则清空# 第三个参数是权限 , 用八进制数字表示,默认 0o666,即可读可写不可执行db = dbm.open("store", "c")# 打开文件就可以存储值了,key 和 value 必须是字符串或 bytes 对象db["name"] = "S せんせい"db["age"] = "18"db[b"corporation"] = "小摩".encode("utf-8")# 关闭文件,将内容写到磁盘上db.close()
非常简单,就像操作字典一样,并且 key 是唯一的,如果存在则替换 。执行完后,当前目录会多出一个 store.db 文件 。文章插图
我们打开它,然后读取刚才写入的键值对 。
import dbmdb = dbm.open("store", "c")# 获取所有的 key,直接返回一个列表print(db.keys())"""[b'corporation', b'name', b'age']"""# 判断一个 key 是否存在,key 可以是字符串或 bytes 对象print("name" in db, "NAME" in db)"""True False"""# 获取一个 key 对应的 value,得到的是 bytes 对象print(db["name"].decode("utf-8"))print(db[b"corporation"].decode("utf-8"))"""S せんせい小摩"""# key 如果不存在 , 会抛出 KeyError,我们可以使用 get 方法print(db.get("NAME", b"unknown"))"""b'unknown'"""# 当然也可以使用 setdefault 方法 , key 不存在时,自动写进去print(db.setdefault("gender", b"female"))"""b'female'"""print(db["gender"])"""b'female'"""
非常简单,当你需要存储的数据量不适合放在内存中,但又没必要引入数据库,那么不妨试试使用 dbm 模块吧 。当然啦,dbm 虽然很方便,但它只能持久化 bytes 对象,字符串也是转成 bytes 对象之后再存储的 。所以除了 dbm 之外 , 还有一个标准库模块 shelve,它可以持久化任意对象 。
shelveshelve 的使用方式和 dbm 几乎是一致的 , 区别就是 shelve 的序列化能力要更强,当然速度自然也就慢一些 。
import shelve# 第二个参数表示模式,默认是 c# 因此文件不存在会创建,存在则追加sh = shelve.open("shelve")sh["name"] = ["S 老师", "高老师", "电烤
【你知道 Python 其实自带了小型数据库吗】
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 你不知道的Websocket协议,这次给你讲明白!
- 解密 Python 如何调用 Rust 编译生成的动态链接库
- 解密Java连接MySQL的最佳实践:选择适合你的方式
- 迷你蟹是什么蟹 迷你蟹的养殖方法
- 女人主动加你的网名 女人主动加你的网名代表什么
- 条件不符就别演“情妇”了,34岁陈小纭告诉你,啥叫教科书式撩汉
- 环保油漆和普通油漆有什么区别 6招教你选购环保油漆
- 《新闻女王》大结局的猜测:这3种走向,你会怎么选?
- 你知道纯正的蜂王浆是什么味道 真正好的蜂王浆是什么样的味道
- 温柔网名 温柔网名干净治愈