将字典存储在数据库中

时间:2014-02-21 12:42:33

标签: python berkeley-db bsddb

我创建了一个Berkeley数据库,并使用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']

我该怎么做?

2 个答案:

答案 0 :(得分:0)

所以,首先,我猜你应该用括号打开你的数据库:

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

请记住,伯克利的模式是关键 - > value,其中key和value都是字符串对象(不是unicode)。您的最佳方式是使用:

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

因为你的笔记与json语法兼容。

但是,如果您只想查询用户名,那么这不是一个很好的选择。评论。您应该使用关系数据库,例如sqlite,它也是内置在Python中的。

答案 1 :(得分:0)

@Falvian描述了一个简单的解决方案。

首先,有序键/值存储中有一个列模式。所以键/值模式不是唯一的模式。

我认为当你不想依赖sqlite时,bsddb是可行的解决方案。第一种方法是创建一个documents = bsddb.btopen['documents.db','c']并存储在json值中。关于键,你有几个选择:

  • 自行命名,就像您"name_of_note_1""name_of_note_2"
  • 一样
  • 使用uuid.uuid4生成随机标识符(不要忘记检查它是否已经使用过;)
  • 或者在documents key=0内使用lambda x: struct.pack('>q', uid)来存储一个用于创建uid(唯一标识符)的计数器。

如果你使用整数,请不要忘记用String token = gcm.register(Config.GOOGLE_PROJECT_ID); 打包它们。

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