我创建了一个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']
我该怎么做?
答案 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。