python的shelved持久化資料

2021-09-25 11:57:19 字數 1355 閱讀 9063

shelve是以鍵值對的形式,將記憶體中的資料通過檔案持久化,值支援任何pickle支援的python資料格式,它會在目錄下生成三個檔案。

import shelve

s = shelve.open('test.db')

s['k1']=

s.close() #關閉檔案

s = shelve.open('test.db') #開啟檔案

print(s['k1'])

print(s['k1']['int'])

s.close()

對於儲存的key,value值,只能新增key,value,可修改整個value,不能單獨修改列表或字典中的元素

s = shelve.open('test.db',flag='r')

print(s['k1'])

s['k2']=[1,2,3] #新增資料

print(s['k2'])

s['k2'][0]=99 #修改儲存的value的單個值時不生效也不報錯

print(s['k2'])

s.close()

s = shelve.open('test.db',flag='c')

s.keys()

s['k2']=(33,44)

print(s['k2'])

寫回(write-back)由於shelve在預設情況下是不會記錄待持久化物件的任何修改的,所以我們在shelve.open()時候需要修改預設引數,否則物件的修改不會儲存。

s = shelve.open('test.db',writeback=true)  #使用回寫功能開啟

print(s['k1']) #初始值

print(s['k2'])

s['k1']['float']='99.99' #修改字典中的元素

print(s['k1']) #成功修改

writeback方式有優點也有缺點。優點是減少了我們出錯的概率,並且讓物件的持久化對使用者更加的透明了;但這種方式並不是所有的情況下都需要,首先,使用writeback以後,shelf在open()的時候會增加額外的記憶體消耗,並且當db在close()的時候會將快取中的每乙個物件都寫入到db,這也會帶來額外的等待時間。因為shelve沒有辦法知道快取中哪些物件修改了,哪些物件沒有修改,因此所有的物件都會被寫入。

print(s['k1'])

s['k1']['list']=[1,2,3]

s['k1']['tuple']=(4,5,6)

s['k1']['dic']=

print(s['k1'])

**: 

python持久化快取 Python資料持久化儲存

1 pymongo的使用 前三步為建立物件 第一步建立連線物件 conn pymongo.mongoclient ip位址 27017 第二步建立庫 db conn 庫名 第三步建立表 myset db 集合名 第四步把資料插入資料庫 myset.inset.one usr bin python c...

編譯python2 5,支援SSL

config make sudo make install 2 編譯,安裝python socket module helper for ssl support you must comment out the other socket line above,and possibly edit th...

如何實現ActiveMq的Topic的持久訂閱

整理 如何實現activemq的topic的持久訂閱 web.xml中的配置作用 整理 activemq的簡單使用方法 新增日期 2013 9 5 10 23 29 快速返回 返回列表 閱讀8971次 1 使用queue,即佇列時,每個訊息只有乙個消費者,所以,持久化很簡單,只要儲存到資料庫即可 然...