尝试使用setdefult()将嵌套字典中的值存储在搁置文件中。有没有简单的方法来做到这一点?以下代码似乎使值不可变,例如,最后一行无法更改'价格'值为25.
room_data = shelve.open("data")
room_data.setdefault("key", {"type": "Standard Single", "available": 5, "price": 50, "adults": 1, "children": 0})
room_data["key"]["price"] = 25
我希望能让它在搁置中运行,然后再添加SQL,但现在可能更容易学习。让我知道你的想法。谢谢。
答案 0 :(得分:0)
您必须设置writeback=True
:
room_data = shelve.open("data", writeback=True)
然后在改变值后调用room_data.sync()
:
room_data.setdefault("key", {"type": "Standard Single", "available": 5, "price": 50, "adults": 1, "children": 0})
room_data["key"]["price"] = 25
room_data.sync()
否则设置该值但设置值不能变异。
关于shelve.open
的说明:
由于Python语义,架子无法知道何时修改了可变的持久字典条目。默认情况下,只有在分配给工具架时才会编写修改的对象(请参见示例)。如果可选的
writeback
参数设置为True
,则所有访问的条目也会缓存在内存中,并写回sync()
和close()
;这可以使持久化字典中的可变条目变得更容易,但是,如果访问了许多条目,它可能会占用大量的内存用于缓存,并且它可以使关闭操作非常慢,因为所有访问的条目都被写回(没有办法确定哪些访问的条目是可变的,哪些实际上是变异的。)