0

尝试使用 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,但现在学习它可能更容易。让我知道你的想法。谢谢。

4

1 回答 1

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()and close();这可以更方便地改变持久字典中的可变条目,但是,如果访问了许多条目,它会消耗大量内存用于缓存,并且由于所有访问的条目都被写回,它会使关闭操作非常慢(无法确定哪些访问的条目是可变的,也无法确定哪些条目实际上是突变的)。

于 2017-05-24T10:31:58.367 回答