Python DBM模塊輕松使用小型數(shù)據(jù)庫存儲(chǔ)管理數(shù)據(jù)
Python dbm模塊
Python 是一門非常強(qiáng)大和靈活的編程語言,它擁有豐富的標(biāo)準(zhǔn)庫,提供了各種各樣的功能和工具。其中,有一個(gè)模塊可能很多人不太熟悉,那就是 dbm 模塊。dbm 模塊其實(shí)是一個(gè)接口,它可以讓你使用 Python 自帶的小型數(shù)據(jù)庫,也就是 DBM 文件系統(tǒng)。
DBM(DataBase Manager)是一種文件系統(tǒng),專門用于鍵值對(duì)的存儲(chǔ),最初是在 Unix 平臺(tái)實(shí)現(xiàn),現(xiàn)在其它平臺(tái)也可以用。對(duì)于 KV 模型,DBM 提供了一個(gè)輕量級(jí)、高效的存儲(chǔ)解決方案??偟膩碚f,DBM 具有如下特點(diǎn):
簡(jiǎn)單快速:非常簡(jiǎn)單易用,讀取和寫入操作都很快,適合存儲(chǔ)少量數(shù)據(jù)。
鍵值對(duì)存儲(chǔ):數(shù)據(jù)是以鍵值對(duì)形式存儲(chǔ)的,你可以像操作 Python 字典一樣。
文件存儲(chǔ):數(shù)據(jù)存在具體的文件中,可以輕松地備份和轉(zhuǎn)移。
不支持復(fù)雜查詢:如果需要執(zhí)行復(fù)雜查詢或需要關(guān)系型數(shù)據(jù)庫的功能,DBM 可能不是一個(gè)好選擇。
而 Python 標(biāo)準(zhǔn)庫提供了一個(gè) dbm 模塊,它實(shí)現(xiàn)了 DBM 文件系統(tǒng)的功能,本文來看一下它的用法和拓展應(yīng)用。
如何使用dmb模塊
要使用 dbm 模塊,首先需要導(dǎo)入它:
import dbm
然后,可以使用 dbm.open(filename, flag) 函數(shù)來打開一個(gè) DBM 文件,或者創(chuàng)建一個(gè)新的 DBM 文件。
filename 參數(shù)是想要打開或者創(chuàng)建的 DBM 文件的名稱,flag 參數(shù)是想要以什么模式打開或者創(chuàng)建 DBM 文件,它可以是以下幾種值:
'r':只讀模式,如果文件不存在,會(huì)拋出異常。
'w':讀寫模式,如果文件不存在,會(huì)創(chuàng)建一個(gè)新文件。
'c':讀寫模式,如果文件不存在,會(huì)創(chuàng)建一個(gè)新文件。
'n':讀寫模式,如果文件存在,會(huì)覆蓋原來的內(nèi)容,如果文件不存在,會(huì)創(chuàng)建一個(gè)新文件。
打開 DBM 文件后,可以像操作字典一樣,使用 db[key] = value 來存儲(chǔ)數(shù)據(jù),或者使用 value = db[key] 來讀取數(shù)據(jù)。也可以使用 db.keys() 來獲取所有的鍵,或者使用 db.values() 來獲取所有的值。還可以使用 db.close() 來關(guān)閉文件,或者使用 with 語句來自動(dòng)關(guān)閉文件。
初級(jí)案例應(yīng)用
下面是一個(gè)簡(jiǎn)單的示例,展示了如何使用 dbm 模塊來存儲(chǔ)和讀取一些學(xué)生的成績(jī)信息:
import dbm # 創(chuàng)建一個(gè)新的 DBM 文件,存儲(chǔ)一些學(xué)生的成績(jī) with dbm.open('scores.db', 'n') as db: db['Alice'] = '90' db['Bob'] = '80' db['Charlie'] = '85' # 打開已有的 DBM 文件,讀取一些學(xué)生的成績(jī) with dbm.open('scores.db', 'r') as db: print(db['Alice']) # 輸出 90 print(db['Bob']) # 輸出 80 print(db['Charlie']) # 輸出 85 print(db.keys()) # 輸出 [b'Alice', b'Bob', b'Charlie'] print(db.values()) # 輸出 [b'90', b'80', b'85']
需要注意的是,DBM 文件只能存儲(chǔ)字符串或者字節(jié)類型的數(shù)據(jù),如果想存儲(chǔ)其他類型的數(shù)據(jù),比如數(shù)字、列表、字典等,需要先將它們轉(zhuǎn)換成字符串或者字節(jié)類型,然后再存儲(chǔ)。
可以使用 str.encode() 和 str.decode() 函數(shù)來進(jìn)行轉(zhuǎn)換,或者使用 pickle 模塊來進(jìn)行序列化和反序列化。
進(jìn)階案例應(yīng)用
如果覺得 dbm 模塊的功能還不夠強(qiáng)大,或者想存儲(chǔ)更復(fù)雜的 Python 對(duì)象,可以使用 shelve 模塊。
shelve 模塊是一個(gè)基于 dbm 模塊的高級(jí)接口,它可以存儲(chǔ)任意類型的 Python 對(duì)象,而不需要進(jìn)行轉(zhuǎn)換或者序列化。shelve 模塊的用法和 dbm 模塊非常類似:
只需要用 shelve.open(filename, flag) 來打開一個(gè) DBM 文件,然后就可以像操作字典一樣,使用 db[key] = value 來存儲(chǔ)數(shù)據(jù),或者使用 value = db[key] 來讀取數(shù)據(jù)。
下面是一個(gè)簡(jiǎn)單的示例,展示了如何使用 shelve 模塊來存儲(chǔ)和讀取一些學(xué)生的信息,包括姓名、年齡和成績(jī):
import shelve # 創(chuàng)建一個(gè)新的 DBM 文件,存儲(chǔ)一些學(xué)生的信息 with shelve.open('students.db', 'n') as db: db['Alice'] = {'name': 'Alice', 'age': 18, 'score': 90} db['Bob'] = {'name': 'Bob', 'age': 19, 'score': 80} db['Charlie'] = {'name': 'Charlie', 'age': 20, 'score': 85} # 打開已有的 DBM 文件,讀取一些學(xué)生的信息 with shelve.open('students.db', 'r') as db: print(db['Alice']) # 輸出 {'name': 'Alice', 'age': 18, 'score': 90} print(db['Bob']) # 輸出 {'name': 'Bob', 'age': 19, 'score': 80} print(db['Charlie']) # 輸出 {'name': 'Charlie', 'age': 20, 'score': 85} print(db.keys()) # 輸出 KeysView(<shelve.DbfilenameShelf object at 0x000001F8A5B9A4C0>) print(db.values()) # 輸出 ValuesView(<shelve.DbfilenameShelf object at 0x000001F8A5B9A4C0>)
可以看到,shelve 模塊可以存儲(chǔ)和讀取復(fù)雜的 Python 對(duì)象,而不需要進(jìn)行任何轉(zhuǎn)換。
但是,shelve 模塊也有一些限制,比如說,不能修改已經(jīng)存儲(chǔ)的對(duì)象的屬性,只能重新賦值一個(gè)新的對(duì)象。
以上就是Python DBM模塊輕松使用小型數(shù)據(jù)庫存儲(chǔ)管理數(shù)據(jù)的詳細(xì)內(nèi)容,更多關(guān)于Python DBM數(shù)據(jù)庫存儲(chǔ)管理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Python使用Rich?type和TinyDB構(gòu)建聯(lián)系人通訊錄
- Python快速進(jìn)修指南之向量數(shù)據(jù)庫文本搜索
- Python?SQLAlchemy與數(shù)據(jù)庫交互操作完整指南
- Python使用cx_Oracle庫連接Oracle數(shù)據(jù)庫指南
- Python連接SQLite數(shù)據(jù)庫操作實(shí)戰(zhàn)指南從入門到精通
- python實(shí)現(xiàn)MySQL?數(shù)據(jù)庫表格創(chuàng)建?數(shù)據(jù)插入及獲取插入ID操作教程
- Python數(shù)據(jù)庫安裝及MySQL?Connector應(yīng)用教程
- python TinyDB輕量級(jí)文檔導(dǎo)向數(shù)據(jù)庫輕松存儲(chǔ)訪問
相關(guān)文章
python光學(xué)仿真實(shí)現(xiàn)光線追跡折射與反射的實(shí)現(xiàn)
這篇文章主要為大家介紹了python光學(xué)仿真實(shí)現(xiàn)光線追跡折射與反射的實(shí)現(xiàn)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-10-10python3.5基于TCP實(shí)現(xiàn)文件傳輸
這篇文章主要為大家詳細(xì)介紹了python3.5基于TCP實(shí)現(xiàn)文件傳輸?shù)拇a,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07如何將DataFrame數(shù)據(jù)寫入csv文件及讀取
在Python中進(jìn)行數(shù)據(jù)處理時(shí),經(jīng)常會(huì)用到CSV文件的讀寫操作,當(dāng)需要將list數(shù)據(jù)保存到CSV文件時(shí),可以使用內(nèi)置的csv模塊,若data是一個(gè)list,saveData函數(shù)能夠?qū)ist中每個(gè)元素存儲(chǔ)在CSV文件的一行,但需要注意的是,默認(rèn)情況下讀取出的CSV數(shù)據(jù)類型為str2024-09-09ubuntu安裝sublime3并配置python3環(huán)境的方法
這篇文章主要介紹了ubuntu安裝sublime3并配置python3環(huán)境的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-03-03python中return的返回和執(zhí)行實(shí)例
今天小編就為大家分享一篇python中return的返回和執(zhí)行實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12