DBM(DataBase Manager)是一種文件系統(tǒng),專門用于鍵值對(duì)的存儲(chǔ),最初是在 Unix 平臺(tái)實(shí)現(xiàn),現(xiàn)在其它平臺(tái)也可以用。對(duì)于 KV 模型,DBM 提供了一個(gè)輕量級(jí)、高效的存儲(chǔ)解決方案。
總的來說,DBM 具有如下特點(diǎn):
而 Python 標(biāo)準(zhǔn)庫提供了一個(gè) dbm 模塊,它實(shí)現(xiàn)了 DBM 文件系統(tǒng)的功能,來看一下它的用法。
import dbm# 第一個(gè)參數(shù)是文件名# 第二個(gè)參數(shù)是模式,有以下幾種# r:只讀,要求文件必須存在,默認(rèn)就是這個(gè)模式# w:可讀可寫,要求文件必須存在# c:可讀可寫,文件不存在會(huì)創(chuàng)建,存在則追加# n:可讀可寫,文件不存在會(huì)創(chuàng)建,存在則清空# 第三個(gè)參數(shù)是權(quán)限,用八進(jìn)制數(shù)字表示,默認(rèn) 0o666,即可讀可寫不可執(zhí)行db = dbm.open("store", "c")# 打開文件就可以存儲(chǔ)值了,key 和 value 必須是字符串或 bytes 對(duì)象db["name"] = "S せんせい"db["age"] = "18"db[b"corporation"] = "小摩".encode("utf-8")# 關(guān)閉文件,將內(nèi)容寫到磁盤上db.close()
非常簡(jiǎn)單,就像操作字典一樣,并且 key 是唯一的,如果存在則替換。執(zhí)行完后,當(dāng)前目錄會(huì)多出一個(gè) store.db 文件。
圖片
我們打開它,然后讀取剛才寫入的鍵值對(duì)。
import dbmdb = dbm.open("store", "c")# 獲取所有的 key,直接返回一個(gè)列表print(db.keys())"""[b'corporation', b'name', b'age']"""# 判斷一個(gè) key 是否存在,key 可以是字符串或 bytes 對(duì)象print("name" in db, "NAME" in db)"""True False"""# 獲取一個(gè) key 對(duì)應(yīng)的 value,得到的是 bytes 對(duì)象print(db["name"].decode("utf-8"))print(db[b"corporation"].decode("utf-8"))"""S せんせい小摩"""# key 如果不存在,會(huì)拋出 KeyError,我們可以使用 get 方法print(db.get("NAME", b"unknown"))"""b'unknown'"""# 當(dāng)然也可以使用 setdefault 方法,key 不存在時(shí),自動(dòng)寫進(jìn)去print(db.setdefault("gender", b"female"))"""b'female'"""print(db["gender"])"""b'female'"""
非常簡(jiǎn)單,當(dāng)你需要存儲(chǔ)的數(shù)據(jù)量不適合放在內(nèi)存中,但又沒必要引入數(shù)據(jù)庫,那么不妨試試使用 dbm 模塊吧。
當(dāng)然啦,dbm 雖然很方便,但它只能持久化 bytes 對(duì)象,字符串也是轉(zhuǎn)成 bytes 對(duì)象之后再存儲(chǔ)的。所以除了 dbm 之外,還有一個(gè)標(biāo)準(zhǔn)庫模塊 shelve,它可以持久化任意對(duì)象。
shelve 的使用方式和 dbm 幾乎是一致的,區(qū)別就是 shelve 的序列化能力要更強(qiáng),當(dāng)然速度自然也就慢一些。
import shelve# 第二個(gè)參數(shù)表示模式,默認(rèn)是 c# 因此文件不存在會(huì)創(chuàng)建,存在則追加sh = shelve.open("shelve")sh["name"] = ["S 老師", "高老師", "電烤
本文鏈接:http://www.www897cc.com/showinfo-26-16369-0.html你知道 Python 其實(shí)自帶了小型數(shù)據(jù)庫嗎
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com