【问题标题】:Shelve - Can't delete entry搁置 - 无法删除条目
【发布时间】:2019-11-24 10:59:25
【问题描述】:

您好,这是我的搁置条目结构

{
    'Birds' : {
        'BlueOnes': ["detailsAboutBlueBird"], 
        'RedOnes' : ["detailsAboutRedBirds"]
    }
}

我正在尝试仅删除 BlueOnes

下面是我正在使用的代码

s = shelve.open('birds.db')
del s['Birds']['BlueOnes']

但它似乎不起作用。

我是不是做错了什么o.o?

【问题讨论】:

  • s['birds'] 解析为普通的 Python 字典; shelve 无法注意到您对其所做的更改。您要么需要对顶级对象进行显式更改(s['birds'] = s['birds'] 应该这样做),要么在对 shelve.open() 的调用中指定 writeback=True 以便它写回您的 每个 项曾经检索过,以防您对其进行了修改(这会影响性能)。

标签: python shelve


【解决方案1】:

shelve 中,如果您想自动检测更改,请使用 writeback 标志,如果设置了该标志,该标志会记住使用内存缓存从数据库中检索到的所有对象如此,当我们关闭书架时,所有对象都会写回数据库。

s = shelve.open('birds.db', writeback=True)

【讨论】:

  • 是的,答案描述中提到,一旦关闭连接,所有对象都会写回数据库
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
  • 2018-06-05
  • 1970-01-01
  • 2018-07-20
  • 1970-01-01
相关资源
最近更新 更多