2012-05-09 61 views
0

我一直在努力學習pickledbm python模塊。我寫了一些連接到dbm數據庫的代碼,並寫入數據和醃製信息。爲什麼不將數據寫入數據庫? (DBM,Python 3.2)

import dbm 
import pickle 
class PickleDB: 
    def set_dbname(self): 
     self.db = dbm.open("pickle", "n") 
    def get_data(self): 
     self.raw_data = input("Enter your raw data") 
     self.pickled_data = pickle.dumps(self.raw_data) 
    def write_to_db(self): 
     self.db["Raw"] = self.raw_data 
     self.db["Pickled"] = self.pickled_data 
pickled_db = PickleDB() 
pickled_db.set_dbname() 
pickled_db.get_data() 
pickled_db.write_to_db() 

運行程序時一切正常,但是當我嘗試訪問數據庫時出現問題。鑰匙不可用。

>>> db = dbm.open("pickle", "n") 
>>> db["Raw"] 
Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
KeyError: 'Raw' 
>>> db.keys() 
[] 

這是爲什麼?爲什麼數據沒有寫入數據庫?

+1

這與泡菜沒有任何關係(酸洗不涉及「原始」鍵);將它縮小爲適當標題的最小測試用例(對於您而言,因爲這是調試過程中的一課,所以稍後對其他用戶會有所幫助)。對於上面提到的問題,我正在關閉「太本地化」。 – 2012-05-09 21:55:44

+0

在程序退出之前,可能需要顯式關閉db。請參閱[文檔]中的示例(http://docs.python.org/py3k/library/dbm)。 –

回答

0

問題是,當您用選項'n'打開它時,會清除數據庫。從pydoc dbm

'n'總是創建一個新的數據庫。

您可能想看看shelve package。如果我理解你正在努力做的事情,「擱置」已經爲你做了。