TinyDB 是一個純 Python 編寫的輕量級數(shù)據(jù)庫,一共只有1800行代碼,沒有外部依賴項。
TinyDB的目標是降低小型 Python 應用程序使用數(shù)據(jù)庫的難度,對于一些簡單程序而言與其用 SQL 數(shù)據(jù)庫,不如就用TinyDB, 因為它有如下特點:
輕便:當前源代碼有 1800 行代碼(大約 40% 的文檔)和 1600 行測試代碼。
可隨意遷移:在當前文件夾下生成數(shù)據(jù)庫文件,不需要任何服務,可以隨意遷移。
簡單:TinyDB 通過提供簡單干凈的 API 使得用戶易于使用。
用純 Python 編寫:TinyDB 既不需要外部服務器,也不需要任何來自 PyPI 的依賴項。
適用于 Python 3.6+ 和 PyPy3:TinyDB 適用于所有現(xiàn)代版本的 Python 和 PyPy。
強大的可擴展性:您可以通過編寫中間件修改存儲的行為來輕松擴展 TinyDB。
100% 測試覆蓋率:無需解釋。
1.準備
開始之前,需要先安裝它
pip installtinydb
2.簡單的增刪改查示例
初始化一個DB文件:
fromtinydb importTinyDB db = TinyDB('db.json')
這樣就在當前文件夾下生成了一個名為 `db.json` 的數(shù)據(jù)庫文件。
往里面插入數(shù)據(jù):
fromtinydb importTinyDB db = TinyDB('db.json') db.insert({'type': 'apple', 'count': 7}) db.insert({'type': 'peach', 'count': 3})可以看到,我們可以直接往數(shù)據(jù)庫里插入字典數(shù)據(jù),不需要任何處理。下面是批量插入的方法:
db.insert_multiple([ {'name': 'John', 'age': 22}, {'name': 'John', 'age': 37}]) db.insert_multiple({'int': 1, 'value': i} fori inrange(2))
查詢所有數(shù)據(jù):
fromtinydb importTinyDB db = TinyDB('db.json') db.all() # [{'count': 7, 'type': 'apple'}, {'count': 3, 'type': 'peach'}]除了 .all() 我們還可以使用for循環(huán)遍歷db:
fromtinydb importTinyDB db = TinyDB('db.json') foritem indb: print(item) # {'count': 7, 'type': 'apple'} # {'count': 3, 'type': 'peach'}如果你需要搜索特定數(shù)據(jù),可以使用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'}]
更新數(shù)據(jù):
fromtinydb importTinyDB db = TinyDB('db.json') db.update({'foo': 'bar'}) # 刪除某個Key fromtinydb.operations importdelete db.update(delete('key1'), User.name == 'John')刪除數(shù)據(jù):
刪除數(shù)據(jù)也可以使用類似的條件語句:
fromtinydb importTinyDB db = TinyDB('db.json') db.remove(Fruit.count < 5) db.all() # [{'count': 10, 'type': 'apple'}]清空整個數(shù)據(jù)庫:
fromtinydb importTinyDB db = TinyDB('db.json') db.truncate() db.all() # []
3.高級查詢
除了點操作符訪問數(shù)據(jù),你還可以用原生的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'))
審核編輯:劉清
-
數(shù)據(jù)庫
+關注
關注
7文章
3799瀏覽量
64388 -
python
+關注
關注
56文章
4797瀏覽量
84683
發(fā)布評論請先 登錄
相關推薦
評論