'''
在python的应用程序中,不需要关系型数据库时,如MySQL
可以使用python提供的持久字典dbm来存储名称和值(键值对)
这个类似于java的中的java.util.Map对象。
区别如下:
存储在硬盘上面
dbm的键值对必须是字符串类型
python支持的dbm模块
dbm -- 常用的dbm模块
dbm.dumb -- 可移植的,简单的dbm库
dbm.gnu -- GNU dbm库
创建一个dbm对象
db = dbm.open('c:\\test\\Hongten.pag', 'c')
'r' -- open existing database for reading only(default)
'w' -- open existing database for reading and writing
'c' -- open database for reading and writing,creating it if it does'n exist
'n' -- always creat a new,empty database,open for reading and writing
给dbm对象赋值,dbm中的键值对都是以字符串形式出现
db['name'] = 'Hongten'
db['gender'] = 'M'
保存,在dbm对象关闭的时候即可保存数据
db.close()
删除值:
del db['name']
会把db对象中的key = 'name'的值删除
遍历整个db对象:
for key in db.keys():
print(key)
'''
运行效果:
运行后,会在:c:\test目录下面出现:
Hongten.pag.bak
Hongten.pag.dat
Hongten.pag.dir
三个文件
输出部分:
Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>>
保存数据...
##################################################
遍历所有数据...
b'name' = b'Hongten'
b'gender' = b'M'
b'address' = b'\xe5\xb9\xbf\xe4\xb8\x9c\xe7\x9c\x81\xe5\xb9\xbf\xe5\xb7\x9e\xe5\xb8\x82'
##################################################
获取[name]键值对数据...
b'Hongten'
##################################################
删除[gender]键值对数据...
遍历所有数据...
b'name' = b'Hongten'
b'address' = b'\xe5\xb9\xbf\xe4\xb8\x9c\xe7\x9c\x81\xe5\xb9\xbf\xe5\xb7\x9e\xe5\xb8\x82'
##################################################
删除所有键值对数据...
遍历所有数据...
>>>
============================================
代码部分:
============================================
1 #python dbm
2
3 #Author : Hongten
4 #MailTo : hongtenzone@foxmail.com
5 #QQ : 648719819
6 #Blog : http://www.cnblogs.com/hongten
7 #Create : 2013-08-09
8 #Version: 1.0
9
10 import dbm
11 '''
12 在python的应用程序中,不需要关系型数据库时,如MySQL
13 可以使用python提供的持久字典dbm来存储名称和值(键值对)
14 这个类似于java的中的java.util.Map对象。
15 区别如下:
16
17 存储在硬盘上面
18 dbm的键值对必须是字符串类型
19
20 python支持的dbm模块
21
22 dbm -- 常用的dbm模块
23 dbm.dumb -- 可移植的,简单的dbm库
24 dbm.gnu -- GNU dbm库
25
26 创建一个dbm对象
27 db = dbm.open('c:\\test\\Hongten.pag', 'c')
28
29 'r' -- open existing database for reading only(default)
30 'w' -- open existing database for reading and writing
31 'c' -- open database for reading and writing,creating it if it does'n exist
32 'n' -- always creat a new,empty database,open for reading and writing
33
34 给dbm对象赋值,dbm中的键值对都是以字符串形式出现
35 db['name'] = 'Hongten'
36 db['gender'] = 'M'
37
38 保存,在dbm对象关闭的时候即可保存数据
39 db.close()
40
41 删除值:
42 del db['name']
43 会把db对象中的key = 'name'的值删除
44
45 遍历整个db对象:
46 for key in db.keys():
47 print(key)
48
49 '''
50
51 db = dbm.open('c:\\test\\Hongten.pag', 'c')
52
53 def get_dbm():
54 '''Open database, creating it if necessary.'''
55 return dbm.open('c:\\test\\Hongten.pag', 'c')
56
57 def save(db):
58 '''保存数据'''
59 print('保存数据...')
60 db['name'] = 'Hongten'
61 db['gender'] = 'M'
62 db['address'] = '广东省广州市'
63 db.close()
64
65 def fetchall(db):
66 '''遍历所有'''
67 print('遍历所有数据...')
68 if db is not None:
69 for key in db.keys():
70 print('{} = {}'.format(key, db[key]))
71 else:
72 print('dbm object is None!')
73
74 def fetchone(db, key):
75 '''获取某个键值对'''
76 print('获取[{}]键值对数据...'.format(key))
77 if db is not None:
78 print(db[key])
79 else:
80 print('dbm object is None!')
81
82 def delete(db, key):
83 '''删除某个键值对'''
84 print('删除[{}]键值对数据...'.format(key))
85 if db is not None:
86 del db[key]
87 else:
88 print('dbm object is None!')
89
90 def deleteall(db):
91 '''删除所有键值对'''
92 print('删除所有键值对数据...')
93 if db is not None:
94 for key in db.keys():
95 del db[key]
96 else:
97 print('dbm object is None!')
98
99 def main():
100 db = get_dbm()
101 save(db)
102 print('#' * 50)
103 db = get_dbm()
104 fetchall(db)
105 print('#' * 50)
106 fetchone(db, 'name')
107 print('#' * 50)
108 delete(db, 'gender')
109 fetchall(db)
110 print('#' * 50)
111 deleteall(db)
112 fetchall(db)
113
114 if __name__ == '__main__':
115 main()