首頁 > 後端開發 > Python教學 > TinyDB 一個純Python編寫的輕量級資料庫

TinyDB 一個純Python編寫的輕量級資料庫

WBOY
發布: 2023-05-15 13:19:06
轉載
1333 人瀏覽過

TinyDB 一个纯Python编写的轻量级数据库

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.準備

開始之前,你要確保Python和pip已經成功安裝在電腦上。

請選擇以下任一種方式輸入指令安裝相依:

1. Windows 環境 開啟 Cmd (開始-執行-CMD)。

2. MacOS 環境 開啟 Terminal (command 空格輸入Terminal)。

3. 如果你用的是VSCode編輯器或Pycharm,可以直接使用介面下方的Terminal.

pip install tinydb
登入後複製

2.簡單的增刪改查範例

#初始化一個DB檔案:

from tinydb import TinyDB
db = TinyDB('db.json')
登入後複製

這樣就在目前資料夾下產生了一個名為`db.json` 的資料庫檔案。

往裡面插入資料:

from tinydb import TinyDB
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} for i in range(2))
登入後複製

查詢所有資料:

from tinydb import TinyDB
db = TinyDB('db.json')
db.all()
# [{'count': 7, 'type': 'apple'}, {'count': 3, 'type': 'peach'}]
登入後複製

除了.all() 我們還可以使用for迴圈遍歷db:

from tinydb import TinyDB
db = TinyDB('db.json')
for item in db:
 print(item)
# {'count': 7, 'type': 'apple'}
# {'count': 3, 'type': 'peach'}
登入後複製

如果你需要搜尋特定數據,可以使用Query():

from tinydb import TinyDB
db = TinyDB('db.json')
Fruit = Query()
db.search(Fruit.type == 'peach')
# [{'count': 3, 'type': 'peach'}]
db.search(Fruit.count > 5)
# [{'count': 7, 'type': 'apple'}]
登入後複製

更新數據:

from tinydb import TinyDB
db = TinyDB('db.json')
db.update({'foo': 'bar'})
# 删除某个Key
from tinydb.operations import delete
db.update(delete('key1'), User.name == 'John')
登入後複製

刪除數據:

#刪除資料也可以使用類似的條件語句:

from tinydb import TinyDB
db = TinyDB('db.json')
db.remove(Fruit.count < 5)
db.all()
# [{'count': 10, 'type': 'apple'}]
登入後複製

清空整個資料庫:

from tinydb import TinyDB
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語句:

from tinydb import where
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:/ /www.php.cn/link/8ff3fdef6f5144f50eb2a83cd34baa5d

#尤其是想基於TinyDB做些儲存優化的同學,你們可以詳細閱讀Storage & Middleware 章節。

以上是TinyDB 一個純Python編寫的輕量級資料庫的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:51cto.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板