日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

提高Python數據存儲效率的利器:shelve和dbm的優勢與應用!

來源: 責編: 時間:2023-12-01 17:15:42 290觀看
導讀作為常用的 python 自帶數據庫管理模塊,shelve 和 dbm 都是非常方便的對象持久化存儲和檢索工具,并且這兩個模塊在使用上具有許多不同的特點。本文將從 shelve 和 dbm 的介紹、用法、優勢以及不同點等方面進行詳細闡述

作為常用的 python 自帶數據庫管理模塊,shelve 和 dbm 都是非常方便的對象持久化存儲和檢索工具,并且這兩個模塊在使用上具有許多不同的特點。5qP28資訊網——每日最新資訊28at.com

本文將從 shelve 和 dbm 的介紹、用法、優勢以及不同點等方面進行詳細闡述和比較,希望能夠幫助讀者更好地理解和使用這兩個數據庫管理模塊。5qP28資訊網——每日最新資訊28at.com

5qP28資訊網——每日最新資訊28at.com

一、shelve 和 dbm 的介紹

shelve 和 dbm 都是 python 自帶的數據庫管理模塊,可以用于持久化存儲和檢索 python 中的對象。5qP28資訊網——每日最新資訊28at.com

雖然這兩個模塊的本質都是建立 key-value 對應關系的數據庫,但 shelve 模塊更像是 python 中的持久化字典。5qP28資訊網——每日最新資訊28at.com

支持存儲 python 中的幾乎所有對象(如整型、字符串、字典、列表等),并且具有一定的數據壓縮功能。5qP28資訊網——每日最新資訊28at.com

而 dbm 則僅支持字符串類型的鍵和值,并且它們會以二進制文件的方式存儲在硬盤上。5qP28資訊網——每日最新資訊28at.com

shelve 需要使用 pickle 模塊對 python 對象進行序列化和反序列化,而 dbm 則直接使用字節序列進行存儲。5qP28資訊網——每日最新資訊28at.com

因此,如果需要實現 python 對象的持久化存儲和檢索,建議使用 shelve;否則,如果采用 dbm 更為合適。5qP28資訊網——每日最新資訊28at.com

不僅如此,shelve 和 dbm 在使用上還存在許多區別,例如 shelve 具有鎖支持。5qP28資訊網——每日最新資訊28at.com

而 dbm 不支持鎖操作,這意味著在一些數據安全性較高的場景下,shelve 更為適合。5qP28資訊網——每日最新資訊28at.com

接下來,我們將重點介紹 shelve 和 dbm 的用法、優勢以及不同點等方面。5qP28資訊網——每日最新資訊28at.com

1.shelve 的用法

使用 shelve 模塊建立和打開數據庫非常簡單,我們只需要執行如下代碼:5qP28資訊網——每日最新資訊28at.com

import shelvedb = shelve.open('mydata.db')

這里,我們建立了一個名字為 mydata.db 的數據庫文件,并使用 shelve 模塊中的 open() 方法建立了一個 shelve 對象 db。5qP28資訊網——每日最新資訊28at.com

此時,我們可以使用 python 字典的方式來存儲和讀取對象:5qP28資訊網——每日最新資訊28at.com

import shelvedb = shelve.open('mydata.db')db['key1'] = 'value1'db['key2'] = 2db['key3'] = {'name': 'Jack', 'age': 25}print(db['key1']) # 輸出 value1print(db['key2']) # 輸出 2print(db['key3']) # 輸出 {'name': 'Jack', 'age': 25}

可以看到,我們成功地將不同類型的 python 對象存儲到了 shelve 數據庫中,并且通過相應的鍵名完成了對其的讀取操作。5qP28資訊網——每日最新資訊28at.com

需要注意的是,在使用 shelve 存儲自定義對象時,通過 setstate__() 和 __getstate() 方法來實現對象的序列化和反序列化。5qP28資訊網——每日最新資訊28at.com

shelve 對象也可以使用 python 的 with 語句進行上下文管理:5qP28資訊網——每日最新資訊28at.com

import shelvewith shelve.open('mydata.db') as db:    db['key4'] = {'name': 'Tom', 'age': 22}print(db['key4']) # 輸出 KeyError: 'key4'

使用 with 語句可以確保在代碼塊結束時,shelve 對象會被關閉,并將其所包含的對象保存到硬盤上。5qP28資訊網——每日最新資訊28at.com

此時,需要注意的是,由于已經關閉了 shelve 對象,無法再直接使用 db 對象訪問鍵值 key4。5qP28資訊網——每日最新資訊28at.com

最后,我們需要手動關閉 shelve 數據庫:5qP28資訊網——每日最新資訊28at.com

import shelvedb = shelve.open('mydata.db')# 操作數據庫db.close()

2.dbm 的用法

與 shelve 類似,使用 dbm 模塊建立和打開數據庫也非常簡單:5qP28資訊網——每日最新資訊28at.com

import dbmdb = dbm.open('mydata.db', 'c')

這里,我們建立了一個名字為 mydata.db 的數據庫文件,并使用 dbm 的 open() 方法建立了一個 dbm 對象 db。5qP28資訊網——每日最新資訊28at.com

需要注意的是,與 shelve 不同的是,dbm 只支持字符串類型的鍵和值,并且需要用字節串的形式作為鍵和值。5qP28資訊網——每日最新資訊28at.com

我們可以使用字節串來存儲字符串:5qP28資訊網——每日最新資訊28at.com

import dbmdb = dbm.open('mydata.db', 'c')db[b'key1'] = b'value1'db[b'key2'] = b'value2'print(db[b'key1']) # 輸出 value1print(db[b'key2']) # 輸出 value2

需要注意的是,我們使用了字節串作為鍵和值,以便在存儲和讀取時使用。5qP28資訊網——每日最新資訊28at.com

如果要將 Unicode 字符串存儲到 dbm 中,需要使用 encode() 方法將其編碼為字節串,例如:5qP28資訊網——每日最新資訊28at.com

import dbmdb = dbm.open('mydata.db', 'c')db[b'key3'] = '這是一個字符串'.encode('utf-8')print(db[b'key3'].decode('utf-8')) # 輸出 這是一個字符串

與 shelve 一樣,dbm 對象也可以使用 python 的 with 語句進行上下文管理:5qP28資訊網——每日最新資訊28at.com

import dbmwith dbm.open('mydata.db', 'c') as db:    db[b'key4'] = b'value4'print(db[b'key4']) # 輸出 KeyError: b'key4'

需要注意的是,在使用 with 語句時,db 對象也會在離開代碼塊時自動關閉。5qP28資訊網——每日最新資訊28at.com

最后,我們需要手動關閉 dbm 數據庫:5qP28資訊網——每日最新資訊28at.com

import dbmdb = dbm.open('mydata.db', 'c')# 操作數據庫db.close()

二、shelve 和 dbm 的優勢

shelve 和 dbm 模塊的優勢在于它們非常方便,無需安裝任何第三方庫即可使用。5qP28資訊網——每日最新資訊28at.com

它們的 API 與 python 內置的類型非常相似,因此使用起來非常簡單。5qP28資訊網——每日最新資訊28at.com

此外,它們對于小型數據存儲和檢索非常高效,并且具有跨平臺的優勢。5qP28資訊網——每日最新資訊28at.com

盡管這些特點不一定具有普適性,但在許多程序中都是優秀且合理的選擇。5qP28資訊網——每日最新資訊28at.com

此外,shelve 模塊具有數據壓縮的功能,可以在一定程度上提高存儲效率。5qP28資訊網——每日最新資訊28at.com

這是由于 shelve 會將 python 對象轉換為字符串,并壓縮這些字符串,從而減小數據文件的大小。5qP28資訊網——每日最新資訊28at.com

因此,如果需要長期存儲比較多的數據,使用 shelve 可以使得磁盤占用量更小,并且可以加速數據存儲和檢索的速度。5qP28資訊網——每日最新資訊28at.com

三、shelve 和 dbm 的不同點

shelve 和 dbm 在使用上具有許多不同點。下面我們將重點討論它們的幾種不同之處。5qP28資訊網——每日最新資訊28at.com

1. 數據類型不同

最引人注目的是,shelve 和 dbm 支持的數據類型不同。5qP28資訊網——每日最新資訊28at.com

shelve 可以存儲任意的 python 對象,包括列表、字典、元組、自定義對象等,而 dbm 僅支持字節串類型的鍵和值。5qP28資訊網——每日最新資訊28at.com

具體來說,對于數據類型的限制,shelve 要比 dbm 更小。5qP28資訊網——每日最新資訊28at.com

這取決于具體應用需求,但是如果需要存儲 python 對象,則可以使用 shelve,否則可以使用 dbm。5qP28資訊網——每日最新資訊28at.com

2. 支持不同的鎖

shelve 具有鎖支持,這意味著它可以被多個進程或線程同時訪問,可以有效避免并發沖突的情況。5qP28資訊網——每日最新資訊28at.com

相比之下,dbm 不支持鎖操作,這意味著在訪問 dbm 數據庫時需要自己實現自己的鎖邏輯,以確保并發訪問的正確性。5qP28資訊網——每日最新資訊28at.com

3. 磁盤空間占用不同

盡管 shelve 和 dbm 都是將數據存儲在硬盤上,但是占用的磁盤空間大小卻有所不同。5qP28資訊網——每日最新資訊28at.com

通常情況下,shelve 會壓縮數據并存儲它們,因此在許多情況下,shelve 會占用更少的磁盤空間。5qP28資訊網——每日最新資訊28at.com

而 dbm 不需要進行壓縮操作,因此當存儲的數據量較小時,dbm 相對于 shelve 更為節省磁盤空間。5qP28資訊網——每日最新資訊28at.com

總結

在本文中,我們詳細介紹了 shelve 和 dbm 兩個 python 自帶的數據庫管理模塊,包括它們的介紹、用法、優勢以及不同點等。5qP28資訊網——每日最新資訊28at.com

雖然 shelve 和 dbm 的共同點是都能實現簡單的持久化存儲和檢索功能。5qP28資訊網——每日最新資訊28at.com

但是這兩個模塊在存儲和檢索的數據類型、支持鎖的程度以及磁盤空間占用等方面存在許多不同點。5qP28資訊網——每日最新資訊28at.com

在選擇具體的模塊時,需要結合實際情況來進行選擇。5qP28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-35893-0.html提高Python數據存儲效率的利器:shelve和dbm的優勢與應用!

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 如何在 matplotlib 中實現多子圖布局?

下一篇: 使用IntelliJ IDEA高效進行Java代碼分析和性能調優

標簽:
  • 熱門焦點
  • 一加Ace2 Pro官宣:普及16G內存 引領24G

    一加官方今天繼續為本月發布的新機一加Ace2 Pro帶來預熱,公布了內存方面的信息?!疤蕴?8GB ,12GB 起步,16GB 普及,24GB 引領,還有呢?#一加Ace2Pro#,2023 年 8 月,敬請期待?!蓖瑫r
  • 直屏旗艦來了 iQOO 12和K70 Pro同臺競技

    旗艦機基本上使用的都是雙曲面屏幕,這就讓很多喜歡直屏的愛好者在苦等一款直屏旗艦,這次,你們等到了。據博主數碼閑聊站帶來的最新爆料稱,Redmi下代旗艦K70 Pro和iQOO 12兩款手
  • 石頭智能洗地機A10 Plus體驗:雙向自清潔治好了我的懶癌

    一、前言和介紹專為家庭請假懶人而生的石頭科技在近日又帶來了自己的全新旗艦新品,石頭智能洗地機A10 Plus。從這個產品名上就不難看出,這次石頭推出的并不是常見的掃地機器
  • 多線程開發帶來的問題與解決方法

    使用多線程主要會帶來以下幾個問題:(一)線程安全問題  線程安全問題指的是在某一線程從開始訪問到結束訪問某一數據期間,該數據被其他的線程所修改,那么對于當前線程而言,該線程
  • 從零到英雄:高并發與性能優化的神奇之旅

    作者 | 波哥審校 | 重樓作為公司的架構師或者程序員,你是否曾經為公司的系統在面對高并發和性能瓶頸時感到手足無措或者焦頭爛額呢?筆者在出道那會為此是吃盡了苦頭的,不過也得
  • “又被陳思誠騙了”

    作者|張思齊 出品|眾面(ID:ZhongMian_ZM)如今的國產懸疑電影,成了陳思誠的天下。最近大爆電影《消失的她》票房突破30億斷層奪魁暑期檔,陳思誠再度風頭無兩。你可以說陳思誠的
  • iQOO Neo8系列或定檔5月23日:首發天璣9200+ 安卓跑分王者

    去年10月,iQOO推出了iQOO Neo7系列機型,不僅搭載了天璣9000+,而且是同價位唯一一款天璣9000+直屏旗艦,一經上市便受到了用戶的廣泛關注。在時隔半年后,
  • 機構稱Q2全球智能手機出貨量同比下滑11% 蘋果份額依舊第2

    7月20日消息,據外媒報道,研究機構的報告顯示,由于需求下滑,今年二季度全球智能手機的出貨量,同比下滑了11%,三星、蘋果等主要廠商的銷量,較去年同期均有下
  • DRAM存儲器10月價格下跌,NAND閃存本月價格與上月持平

    10月30日,據韓國媒體消息,自今年年初以來一直在上漲的 DRAM 存儲器的交易價格僅在本月就下跌了近 10%,此次是全年首次降價,而NAND 閃存本月價格與上月持平。市
Top 主站蜘蛛池模板: 贵溪市| 思南县| 旬阳县| 通化县| 剑阁县| 莫力| 宜城市| 乌苏市| 新疆| 吉首市| 云浮市| 和平县| 松滋市| 洪湖市| 溧水县| 定边县| 乐亭县| 上林县| 讷河市| 巴塘县| 临漳县| 平阴县| 县级市| 临邑县| 达州市| 太白县| 平陆县| 手机| 辽宁省| 黄陵县| 柯坪县| 凤凰县| 舟山市| 靖江市| 凤阳县| 温泉县| 湖口县| 邯郸县| 洛南县| 淮北市| 改则县|