Python 的 dbm模块是 DBM数据库(dbm.gnu 或 dbm.ndbm)的通用接口。如果没有安装这些 DBM 数据库,则将使用简单的但速度较慢的模块 dbm.dumb 作为 DBM 数据库。
和 shelve 模块不同的是,dbm 模块中的键(key)和值(value)都必须是字符串,而 shelve 模块中的 value 可以是任何 Python 类型对象。
dbm.gnu、dbm.ndbm 和 dbm.dumb 模块的函数 open()都具有一致的接口,其格式如下:
open(filename[, flag[, mode]])
其中,
可选的标志参数 flag 必须是以下值之一:
- ‘r’:打开一个存在的文件(默认值)。
- ‘w’:打开文件对其读/写,如果文件不存在,则不会创建它。
- ‘c’:打开文件对其进行读/写,如果不存在则创建该文件。
- ‘n’:总是创建一个新的空白文件用于读/写。
可选的参数 mode 是文件的 Unix 模式,仅在需要创建数据库时使用。它默认为八进制的 0o666。
下面程序创建一个新的空数据库,并写入一些“键-值”:
import dbm
with dbm.open('test_dbm.db', 'n') as db:
db['name'] = '张伟'
db['ege'] = '23'
db['分数'] = '68.9'
打开这个存在的数据库,并通过 keys()方法遍历其中的 key(键):
import dbm
with dbm.open('test_dbm.db', 'r') as db:
print('keys():', db.keys())
for k in db.keys():
print('iterating:', k, db[k])
print('db["分数"] =', db['分数'])
输出:
keys(): [b'name', b'ege', b'\xe5\x88\x86\xe6\x95\xb0']
iterating: b'name' b'\xe5\xbc\xa0\xe4\xbc\x9f'
iterating: b'ege' b'23'
iterating: b'\xe5\x88\x86\xe6\x95\xb0' b'68.9'
db["分数"] = b'68.9'