TinyDB 是一個純 Python 編寫的輕量級數據庫,一共只有1800行代碼,沒有外部依賴項。
TinyDB的目標是降低小型 Python 應用程序使用數據庫的難度,對于一些簡單程序而言與其用 SQL 數據庫,不如就用TinyDB, 因為它有如下特點:
- 輕便:當前源代碼有 1800 行代碼(大約 40% 的文檔)和 1600 行測試代碼。
- 可隨意遷移:在當前文件夾下生成數據庫文件,不需要任何服務,可以隨意遷移。
- 簡單:TinyDB 通過提供簡單干凈的 API 使得用戶易于使用。
- 用純 Python 編寫:TinyDB 既不需要外部服務器,也不需要任何來自 PyPI 的依賴項。
- 適用于 Python 3.6+ 和 PyPy3:TinyDB 適用于所有現代版本的 Python 和 PyPy。
- 強大的可擴展性:您可以通過編寫中間件修改存儲的行為來輕松擴展 TinyDB。
- 100% 測試覆蓋率:無需解釋。
1.準備
開始之前,需要先安裝它
pip installtinydb
2.簡單的增刪改查示例
初始化一個DB文件:
fromtinydb importTinyDB
db = TinyDB('db.json')
這樣就在當前文件夾下生成了一個名為 `db.json` 的數據庫文件。
往里面插入數據:
fromtinydb importTinyDB
db = TinyDB('db.json')
db.insert({'type': 'apple', 'count': 7})
db.insert({'type': 'peach', 'count': 3})
可以看到,我們可以直接往數據庫里插入字典數據,不需要任何處理。下面是批量插入的方法:
db.insert_multiple([
{'name': 'John', 'age': 22},
{'name': 'John', 'age': 37}])
db.insert_multiple({'int': 1, 'value': i} fori inrange(2))
查詢所有數據:
fromtinydb importTinyDB
db = TinyDB('db.json')
db.all()
# [{'count': 7, 'type': 'apple'}, {'count': 3, 'type': 'peach'}]
除了 .all() 我們還可以使用for循環遍歷db:
fromtinydb importTinyDB
db = TinyDB('db.json')
foritem indb:
print(item)
# {'count': 7, 'type': 'apple'}
# {'count': 3, 'type': 'peach'}
如果你需要搜索特定數據,可以使用Query():
fromtinydb importTinyDB
db = TinyDB('db.json')
Fruit = Query()
db.search(Fruit.type == 'peach')
# [{'count': 3, 'type': 'peach'}]
db.search(Fruit.count > 5)
# [{'count': 7, 'type': 'apple'}]
更新數據:
fromtinydb importTinyDB
db = TinyDB('db.json')
db.update({'foo': 'bar'})
# 刪除某個Key
fromtinydb.operations importdelete
db.update(delete('key1'), User.name == 'John')
刪除數據:刪除數據也可以使用類似的條件語句:
fromtinydb importTinyDB
db = TinyDB('db.json')
db.remove(Fruit.count < 5)
db.all()
# [{'count': 10, 'type': 'apple'}]
清空整個數據庫:
fromtinydb importTinyDB
db = TinyDB('db.json')
db.truncate()
db.all()
# []
3.高級查詢
除了點操作符訪問數據,你還可以用原生的dict訪問表示法:
# 寫法1
db.search(User.country-code == 'foo')
# 寫法2
db.search(User['country-code'] == 'foo')
這兩種寫法是等效的。另外在常見的查詢運算符(==, <, >, ...)之外,TinyDB還支持where語句:
fromtinydb importwhere
db.search(where('field') == 'value')
這等同于:
db.search(Query()['field'] == 'value')
這種語法還能訪問嵌套字段:
db.search(where('birthday').year == 1900)
# 或者
db.search(where('birthday')['year'] == 1900)
Any 查詢方法:
db.search(Group.permissions.any(Permission.type == 'read'))
# [{'name': 'user', 'permissions': [{'type': 'read'}]},
# {'name': 'sudo', 'permissions': [{'type': 'read'}, {'type': 'sudo'}]},
# {'name': 'admin', 'permissions':
# [{'type': 'read'}, {'type': 'write'}, {'type': 'sudo'}]}]
檢查單個項目是否包含在列表中:
db.search(User.name.one_of(['jane', 'john']))
TinyDB還支持和Pandas類似的邏輯操作:
# Negate a query:
db.search(~ (User.name == 'John'))
# Logical AND:
db.search((User.name == 'John') & (User.age <= 30))
# Logical OR:
db.search((User.name == 'John') | (User.name == 'Bob'))
TinyDB的介紹就到這里,你還可以訪問他們的官方文檔,查看更多的使用方法:https://tinydb.readthedocs.io/en/latest/usage.html
尤其是想基于TinyDB做些存儲優化的同學,你們可以詳細閱讀 Storage & Middleware 章節。
審核編輯 :李倩
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
數據庫
+關注
關注
7文章
4019瀏覽量
68339 -
應用程序
+關注
關注
38文章
3344瀏覽量
60251
原文標題:一個純 Python 編寫的輕量級數據庫 -- TinyDB
文章出處:【微信號:DBDevs,微信公眾號:數據分析與開發】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
熱點推薦
恒訊科技解析:如何安裝MySQL并創建數據庫
安裝和管理MySQL不必復雜。只需幾分鐘,你就能在Linux服務器上搭建MySQL,創建第一個數據庫,甚至自動化備份——同時確保數據安全有序。 什么是 MySQL? MySQL 是一個
數據庫性能優化指南
作為一名在大廠摸爬滾打多年的運維老兵,我見過太多因為數據庫性能問題導致的生產事故。今天分享一套完整的數據庫優化方法論,從SQL層面到硬件配置,幫你徹底解決性能瓶頸!
Crypto核心庫:顛覆傳統的數據安全輕量級加密方案
傳統加密方案常陷入“安全與性能”的二元悖論。Crypto核心庫打破這一僵局,通過輕量級架構與算法優化,實現加密解密的雙向突破:在保障銀行級安全的同時,將資源消耗壓縮至極致,讓數據安全“
基于米爾瑞芯微RK3576開發板部署運行TinyMaix:超輕量級推理框架
本文將介紹基于米爾電子MYD-LR3576開發平臺部署超輕量級推理框架方案:TinyMaix
摘自優秀創作者-短笛君
TinyMaix 是面向單片機的超輕量級的神經網絡推理庫,即 TinyML
發表于 07-25 16:35
如何在RK3576開發板上運行TinyMaix :超輕量級推理框架--基于米爾MYD-LR3576開發板
本文將介紹基于米爾電子MYD-LR3576開發平臺部署超輕量級推理框架方案:TinyMaix摘自優秀創作者-短笛君TinyMaix是面向單片機的超輕量級的神經網絡推理庫,即TinyML推理庫
數據庫數據恢復—服務器異常斷電導致Oracle數據庫故障的數據恢復案例
Oracle數據庫故障:
某公司一臺服務器上部署Oracle數據庫。服務器意外斷電導致數據庫報錯,報錯內容為“system01.dbf需要更多的恢復來保持
oracle數據恢復—oracle數據庫誤執行錯誤truncate命令如何恢復數據?
oracle數據庫誤執行truncate命令導致數據丟失是一種常見情況。通常情況下,oracle數據庫誤操作刪除數據只需要通過備份恢復
SQLSERVER數據庫是什么
SQL Server 是由微軟公司開發的一款 關系型數據庫管理系統(RDBMS) ,用于存儲、管理和檢索結構化數據。它是企業級應用中廣泛使用的數據庫解決方案之
MySQL數據庫是什么
MySQL數據庫是一種 開源的關系型數據庫管理系統(RDBMS) ,由瑞典MySQL AB公司開發,后被Oracle公司收購。它通過結構化查詢語言(SQL)進行數據存儲、管理和操作,廣
HarmonyOS5云服務技術分享--云數據庫使用指南
? 華為云數據庫(CloudDB)在HarmonyOS中的使用指南 ?
??嗨,開發者朋友們!??
今天咱們來聊聊華為云數據庫(CloudDB)在HarmonyOS應用中的集成和使用技巧。無論你是剛
發表于 05-22 18:29
SEGGER emFile支持大型數據庫
SEGGER宣布emFile對大型數據庫的支持,集成了SQLite,方便與SEGGER的BigFAT和微軟的exFAT一起使用。
數據庫數據恢復——MongoDB數據庫文件拷貝后服務無法啟動的數據恢復
MongoDB數據庫數據恢復環境:
一臺Windows Server操作系統虛擬機上部署MongoDB數據庫。
MongoDB數據庫
一個純Python編寫的輕量級數據庫
評論