欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python3 shelve對象持久存儲原理詳解

 更新時間:2020年03月23日 10:32:24   作者:愛編程的小灰灰  
這篇文章主要介紹了Python3 shelve對象持久存儲原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

1.shelve對象的持久存儲

不需要關(guān)系數(shù)據(jù)庫時,可以用shelve模塊作為持久存儲Python對象的一個簡單的選擇。類似于字典,shelf按鍵訪問。值將被pickled并寫至由dbm創(chuàng)建和管理的數(shù)據(jù)庫。

1.1 創(chuàng)建一個新shelf

使用shelve最簡單的方法就是利用DbfilenameShelf類。它使用dbm存儲數(shù)據(jù)。這個類可以直接使用,也可以通過調(diào)用shelve.open()來使用。

import shelve
with shelve.open('test_shelf.db') as s:
  s['key1'] = {
    'int': 10,
    'float': 9.5,
    'string': 'Sample data',
  }

再次訪問這個數(shù)據(jù),可以打開shelf,并像字典一樣使用它。

import shelve
with shelve.open('test_shelf.db') as s:
  existing = s['key1']
print(existing)

運行這兩個示例腳本會生成以下輸出。

dbm模塊不支持多個應(yīng)用同時寫同一個數(shù)據(jù)庫,不過它支持并發(fā)的只讀客戶。如果一個客戶沒有修改shelf,則可以通過傳入flag='r'來告訴shelve以只讀方式打開數(shù)據(jù)庫。

import dbm
import shelve
with shelve.open('test_shelf.db', flag='r') as s:
  print('Existing:', s['key1'])
  try:
    s['key1'] = 'new value'
  except dbm.error as err:
    print('ERROR: {}'.format(err))

如果數(shù)據(jù)庫作為只讀數(shù)據(jù)源打開,并且程序試圖修改數(shù)據(jù)庫,那么便會生成一個訪問錯誤異常。具體的異常類型取決于創(chuàng)建數(shù)據(jù)庫時dbm選擇的數(shù)據(jù)庫模塊。

1.2 寫回

默認的,shelf不會跟蹤對可變對象的修改。這說明,如果存儲在shelf中的一個元素的內(nèi)容有變化,那么shelf必須再次存儲整個元素來顯式的更新。

import shelve
with shelve.open('test_shelf.db') as s:
  print(s['key1'])
  s['key1']['new_value'] = 'this was not here before'
with shelve.open('test_shelf.db', writeback=True) as s:
  print(s['key1'])

在這個例子中,沒有再次存儲'key1'的相應(yīng)字典,所以重新打開shelf時,修改不會保留。

對于shelf中存儲的可變對象,要想自動捕獲對它們的修改,可以在打開shelf時啟用寫回(writeback)。writeback標(biāo)志會讓shelf使用內(nèi)存中緩存以記住從數(shù)據(jù)庫獲取的所有對象。shelf關(guān)閉時每個緩存對象也被寫回到數(shù)據(jù)庫。

import shelve
import pprint
with shelve.open('test_shelf.db', writeback=True) as s:
  print('Initial data:')
  pprint.pprint(s['key1'])
  s['key1']['new_value'] = 'this was not here before'
  print('\nModified:')
  pprint.pprint(s['key1'])
with shelve.open('test_shelf.db', writeback=True) as s:
  print('\nPreserved:')
  pprint.pprint(s['key1'])

盡管這會減少程序員犯錯的機會,并且使對象持久存儲更透明,但是并非所有情況都有必要使用寫回模式。打開shelf時緩存會消耗額外的內(nèi)容,關(guān)閉shelf時會暫時將各個緩存對象寫回到數(shù)據(jù)庫,這會減慢應(yīng)用的速度。所有緩存的對象都要寫回數(shù)據(jù)庫,因為無法區(qū)分它們是否有修改。如果應(yīng)用讀取的數(shù)據(jù)多于寫的數(shù)據(jù),那么寫回就會影響性能而沒有太大意義。

1.3 特定shelf類型

之前的例子都使用了默認的shelf實現(xiàn)??梢允褂胹helve.open()而不是直接使用某個shelf實現(xiàn),這是一種常用的用法,特別是使用什么類型的數(shù)據(jù)庫來存儲數(shù)據(jù)并不重要時。不過,有些情況下數(shù)據(jù)庫格式會很重要。在這些情況下,可以直接使用DbfilenameShelf或BsdDbshelf,或者甚至可以派生Shelf來得到一個定制解決方案。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python手寫均值濾波

    python手寫均值濾波

    這篇文章主要為大家詳細介紹了python手寫均值濾波的相關(guān)代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • 對Python中range()函數(shù)和list的比較

    對Python中range()函數(shù)和list的比較

    下面小編就為大家分享一篇對Python中range()函數(shù)和list的比較,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • 分享一下Python數(shù)據(jù)分析常用的8款工具

    分享一下Python數(shù)據(jù)分析常用的8款工具

    Python是數(shù)據(jù)處理常用工具,可以處理數(shù)量級從幾K至幾T不等的數(shù)據(jù),具有較高的開發(fā)效率和可維護性,還具有較強的通用性和跨平臺性,這里就為大家分享幾個不錯的數(shù)據(jù)分析工具,需要的朋友可以參考下
    2018-04-04
  • Python運行報錯UnicodeDecodeError的解決方法

    Python運行報錯UnicodeDecodeError的解決方法

    本文給大家分享的是在Python項目中經(jīng)常遇到的關(guān)于編碼問題的一個小bug的解決方法以及分析方法,有相同遭遇的小伙伴可以來參考下
    2016-06-06
  • Python中調(diào)用其他程序的方式詳解

    Python中調(diào)用其他程序的方式詳解

    這篇文章主要介紹了Python中調(diào)用其他程序的方式詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • Python數(shù)據(jù)結(jié)構(gòu)之列表與元組詳解

    Python數(shù)據(jù)結(jié)構(gòu)之列表與元組詳解

    序列是Python中最基本的數(shù)據(jù)結(jié)構(gòu)。序列中的每個元素都分配一個數(shù)字 - 它的位置,或索引,第一個索引是0,第二個索引是1,依此類推,元組與列表類似,不同之處在于元組的元素不能修改。元組使用小括號,列表使用方括號
    2021-10-10
  • python刪除文件夾中具有相同后綴類型文件的實戰(zhàn)演練

    python刪除文件夾中具有相同后綴類型文件的實戰(zhàn)演練

    在平時卸載軟件的時候會殘留許多文件和空文件夾,下面這篇文章主要給大家介紹了關(guān)于python刪除文件夾中具有相同后綴類型文件的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-03-03
  • Python獲取系統(tǒng)所有進程PID及進程名稱的方法示例

    Python獲取系統(tǒng)所有進程PID及進程名稱的方法示例

    這篇文章主要介紹了Python獲取系統(tǒng)所有進程PID及進程名稱的方法,涉及Python使用psutil對系統(tǒng)進程進行操作的相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2018-05-05
  • python實現(xiàn)將html表格轉(zhuǎn)換成CSV文件的方法

    python實現(xiàn)將html表格轉(zhuǎn)換成CSV文件的方法

    這篇文章主要介紹了python實現(xiàn)將html表格轉(zhuǎn)換成CSV文件的方法,涉及Python操作csv文件的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • 如何使用python爬取知乎熱榜Top50數(shù)據(jù)

    如何使用python爬取知乎熱榜Top50數(shù)據(jù)

    主要是爬取知乎熱榜的問題及點贊數(shù)比較高的答案,通過requests請求庫進行爬取,對大家的學(xué)習(xí)或工作具有一定的價值,需要的朋友可以參考下
    2021-09-09

最新評論