最近發(fā)現(xiàn)的 3 個 Python 輕量級數(shù)據(jù)庫,好用到爆!
你好,我是征哥,在寫程序的時候經(jīng)常會需要將數(shù)據(jù)保存到本地,比如是配置文件,或者是中間過程數(shù)據(jù),通過情況下我會選擇 json、pickle 或者 sqlite。但是他們都有點不大方便。
比如 json 和 pickle,需要先序列化保存到文件,讀的時候再反序列化成 Python 對象。往往搞不清楚是 load 還是 dump,是 loads 還是 dumps,需要查下文檔。而 sqlite,雖然是文件數(shù)據(jù)庫,但用起來和大的數(shù)據(jù)庫 MySQL 的復(fù)雜度也差不多。
今天分享一下這些專門為 Python 打造的輕量級數(shù)據(jù)庫,使用起來真的簡單到爆,寫代碼時沒有記憶負擔(dān)。
Shelve
如果說 Python 中的字典(dict)是保存在內(nèi)存中的,那么標準庫 shelve[1] 就像是保存在文件中的字典,它的值可以為為任意 pickle 模塊能夠處理的 Python 對象,這包括大部分類實例、遞歸數(shù)據(jù)類型,以及包含大量共享子對象的對象,它的鍵則為普通的字符串。
使用方法:shelve.open(filename, flag='c', protocol=None, writeback=False)
示例代碼如下,可以看下注釋:
import?shelve
#?寫入
db?=?shelve.open("store")
db["data"]?=?{"name":?"Python七號",?"author":?"somenzz"}
db.close()
#?會生成文件?store.db
#?推薦這種寫法?
with?shelve.open("store")?as?db:
????db["data"]?=?{"name":?"Python七號",?"author":?"somenzz"}
#讀取
with?shelve.open("store")?as?db:
????print(db["data"])
#out?{'name':?'Python七號',?'author':?'somenzz'}
pickleDB
pickleDB[2] 是一個輕量級且簡單的鍵值對存儲。它建立在 Python 的 simplejson 模塊之上,并受到 redis 的啟發(fā)。可以通過 pip install pickledb 進行安裝。
使用方法:
>>>?import?pickledb
>>>?db?=?pickledb.load('example.db',?auto_dump?=?False)
>>>?db.set('name',?'Python七號')
True
>>>?db.get('name')
'Python七號'
>>>?db.dump()
True
TinyDB
與 pickleDB 和 Shelve 類似,TinyDB 是另一種快速且輕量級的鍵值對存儲。TinyDB[3] 的優(yōu)點是非常快,非常簡單易用。TinyDB 的接口類似于許多鍵值存儲,但提供了許多附加功能,例如編寫自己的存儲中間件能力。
用法:
import?tinydb
db?=?tinydb.TinyDB("store.json")
db.insert({"name":?"Python七號"})
db.insert({"author":?"somenzz"})
results?=?db.all()
print(results)
#?output?[{'name':?'Python七號'},?{'author':?'somenzz'}]
還可以這樣用:
>>>?from?tinydb?import?TinyDB,?Query
>>>?db?=?TinyDB('path/to/db.json')
>>>?User?=?Query()
>>>?db.insert({'name':?'Python七號',?'author':?'somenzz'})
>>>?db.search(User.name?==?'Python七號')
[{'name':?'Python七號',?'author':?'somenzz'}]
是不是很方便?
最后的話
本文分享了 3 個輕量級的 Python 文件型數(shù)據(jù)庫,它們都非常簡單易用,希望對你的編程有所幫助。獨學(xué)而無友,則孤陋而寡聞,因此我組建了一個純技術(shù)交流群,關(guān)注公眾號「Python七號」回復(fù)「入群」加入技術(shù)交流群。
shelve: https://docs.python.org/zh-cn/3/library/shelve.html
[2]pickleDB: https://pythonhosted.org/pickleDB/
[3]TinyDB: https://tinydb.readthedocs.io/en/latest/
