在我们使用shelve.open创建数据库文件然后关闭程序之后,如果我们再次运行代码但使用不同的输入,它实际上替换文本而不是追加它。
我该如何改变这种行为? 例如:
db = shelve.open('store')
db['some variable'] = some value
db['another variable'] = another value
db.close()
现在,当我们为相同的变量编写相同的代码但具有不同的值时,我们替换之前的值,而不是将值附加。我怎么能改变它?
答案 0 :(得分:2)
假设您的值是列表:
使用db = shelve.open('store',writeback=True)
,然后将值附加到同一个键。
由于您的代码无法使用'store'
打开writeback=True
必须为变量分配密钥temp = db['some variable']
的值,这将是
some value
,然后附加该变量temp.append(another
value)
,然后重新分配该键值db['some variable'] =
temp
。
为了替换值,您的第三行代码不应该是db['some variable'] = another value'
吗?
编辑:问题的其他可能含义?
您是说要将数据库加载到对象中并在关闭程序后继续使用“UI”代码进行编辑吗?如果是这样,那么你可以做类似的事情:
class Update_MyStore(MyStore):
def __init__(self, store):
db = shelve.open(store)
for i in db:
setattr(self, i, db[i])
self.items()
self.store_in_db()
Update_MyStore('store')
修改:如果您想要添加或更新特定项目,则需要更新另一个选项:
while True:
store = shelve.open('store',writeback = True)
Item = input('Enter an item: ').capitalize() #I prefer str(raw_input('Question '))
if not Item or Item == 'Break':
break
store['item_quantity'][Item] = int(input(('Enter the number of {0} available in the store: ').format(Item)))
store['item_rate'][Item] = float(input(('Enter the rate of {0}: ').format(Item)))
store.sync()
store.close()