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

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

WBOY
WBOY轉載
2023-05-15 13:19:061299瀏覽

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刪除