最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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 寫回

默認(rèn)的,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類型

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

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

相關(guān)文章

  • pygame 精靈的行走及二段跳的實現(xiàn)方法(必看篇)

    pygame 精靈的行走及二段跳的實現(xiàn)方法(必看篇)

    下面小編就為大家?guī)硪黄猵ygame 精靈的行走及二段跳的實現(xiàn)方法(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • Python如何對XML 解析

    Python如何對XML 解析

    這篇文章主要介紹了Python對XML 解析的方法,文中講解非常細致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • Python繪制并保存指定大小圖像的方法

    Python繪制并保存指定大小圖像的方法

    今天小編就為大家分享一篇Python繪制并保存指定大小圖像的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 深入理解python?生成器、迭代器、動態(tài)新增屬性及方法

    深入理解python?生成器、迭代器、動態(tài)新增屬性及方法

    這篇文章主要介紹了python?生成器、迭代器、動態(tài)新增屬性及方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • python輸出第n個默尼森數(shù)的實現(xiàn)示例

    python輸出第n個默尼森數(shù)的實現(xiàn)示例

    這篇文章主要介紹了python輸出第n個默尼森數(shù)的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • python?nonlocal的用法詳解

    python?nonlocal的用法詳解

    這篇文章主要給大家介紹了關(guān)于python?nonlocal用法的相關(guān)資料,最近在python學(xué)習(xí)中遇到了nonlocal關(guān)鍵字但是感到困惑,于是記錄nonlocal關(guān)鍵字用法,需要的朋友可以參考下
    2023-10-10
  • Python實現(xiàn)為pdf添加水印功能

    Python實現(xiàn)為pdf添加水印功能

    這篇文章主要介紹了Python實現(xiàn)給普通PDF添加水印的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • Python入門教程(二十六)Python的模塊

    Python入門教程(二十六)Python的模塊

    這篇文章主要介紹了Python入門教程(二十六)Python的模塊,Python是一門非常強大好用的語言,也有著易上手的特性,本文為入門教程,需要的朋友可以參考下
    2023-04-04
  • 解決Python列表字符不區(qū)分大小寫的問題

    解決Python列表字符不區(qū)分大小寫的問題

    今天小編就為大家分享一篇解決Python列表字符不區(qū)分大小寫的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python用list或dict字段模式讀取文件的方法

    Python用list或dict字段模式讀取文件的方法

    這篇文章主要給大家介紹了Python利用list字段模式或者dict字段模式讀取文件的方法,文中給出了詳細的介紹和示例代碼,相信對大家的理解和學(xué)習(xí)具有一定的參考借鑒價值,有需要的朋友可以跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-01-01

最新評論

乌拉特中旗| 新乐市| 密云县| 新晃| 佛坪县| 揭东县| 都匀市| 博客| 新余市| 宁陵县| 新津县| 南乐县| 那曲县| 民县| 潼南县| 都昌县| 阳泉市| 朔州市| 千阳县| 城口县| 怀安县| 佛山市| 饶河县| 镇原县| 上虞市| 广汉市| 灯塔市| 望谟县| 定安县| 大连市| 无棣县| 南溪县| 土默特右旗| 肇州县| 淮安市| 德江县| 阿城市| 宿松县| 开封县| 屏东市| 泰州市|