''' 在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()