2014-02-21 58 views
1

我創建了一個伯克利數據庫,並使用它來使用bsddb模塊進行操作。我需要存儲在樣式有信息,例如:在數據庫中存儲字典

username = '....' 
notes = {'name_of_note1':{ 
          'password':'...', 
          'comments':'...', 
          'title':'...' 
         } 
     'name_of_note2':{ 
          #keys same as previous, but another values 
         } 
     } 

我這是怎麼打開數據庫

db = bsddb.btopen['data.db','c'] 

我該怎麼辦呢?

回答

0

因此,首先,我想你應該打開你的使用數據庫括號:

db = bsddb.btopen('data.db','c') 

請記住,伯克利的模式是關鍵 - >值,其中key和值是String對象(不是Unicode)。在你的情況下最好的方法是使用:

db[str(username)] = json.dumps(notes) 

因爲您的筆記與json語法兼容。

但是,如果您只想查詢用戶名的評論,這不是一個很好的選擇。你應該使用一個關係數據庫,比如sqlite,它也是Python中內置的。

0

@Falvian描述了一個簡單的解決方案。

首先在中有一個列模式,訂購鍵/值存儲。所以鍵/值模式不是唯一的。

我認爲,當你不想依賴sqlite時,bsddb是可行的解決方案。第一種方法是創建一個documents = bsddb.btopen['documents.db','c']並存儲json值。至於按鍵,你有幾種選擇:

  • 名稱鍵自己,像你這樣"name_of_note_1""name_of_note_2"
  • 使用uuid.uuid4生成隨機標識符(不要忘記檢查它尚未使用;)
  • 或者使用此documents中的一行與key=0來存儲您將用於創建uid(唯一標識符)的計數器。

如果您使用整數不要忘記將其存儲之前lambda x: struct.pack('>q', uid)收拾他們。

如果您需要創建索引。我建議你看看我的其他answer introducting composite keys to build index in bsddb