0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一個(gè)純Python編寫的輕量級(jí)數(shù)據(jù)庫(kù)

汽車電子技術(shù) ? 來(lái)源:Python實(shí)用寶典 ? 作者:Ckend ? 2023-02-24 10:32 ? 次閱讀

TinyDB 是一個(gè)純 Python 編寫的輕量級(jí)數(shù)據(jù)庫(kù),一共只有1800行代碼,沒(méi)有外部依賴項(xiàng)。

TinyDB的目標(biāo)是降低小型 Python 應(yīng)用程序使用數(shù)據(jù)庫(kù)的難度,對(duì)于一些簡(jiǎn)單程序而言與其用 SQL 數(shù)據(jù)庫(kù),不如就用TinyDB, 因?yàn)樗腥缦绿攸c(diǎn):

  • 輕便: 當(dāng)前源代碼有 1800 行代碼(大約 40% 的文檔)和 1600 行測(cè)試代碼。
  • 可隨意遷移: 在當(dāng)前文件夾下生成數(shù)據(jù)庫(kù)文件,不需要任何服務(wù),可以隨意遷移。
  • 簡(jiǎn)單: TinyDB 通過(guò)提供簡(jiǎn)單干凈的 API 使得用戶易于使用。
  • 用純 Python 編寫: TinyDB 既不需要外部服務(wù)器,也不需要任何來(lái)自 PyPI 的依賴項(xiàng)。
  • 適用于 Python 3.6+ 和 PyPy3: TinyDB 適用于所有現(xiàn)代版本的 Python 和 PyPy。
  • 強(qiáng)大的可擴(kuò)展性: 您可以通過(guò)編寫中間件修改存儲(chǔ)的行為來(lái)輕松擴(kuò)展 TinyDB。
  • 100% 測(cè)試覆蓋率: 無(wú)需解釋。

1.準(zhǔn)備

開(kāi)始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上,如果沒(méi)有,可以訪問(wèn)這篇文章:超詳細(xì)Python安裝指南進(jìn)行安裝。

**(可選1) **如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda:Python數(shù)據(jù)分析與挖掘好幫手—Anaconda,它內(nèi)置了Python和pip.

**(可選2) **此外,推薦大家用VSCode編輯器,它有許多的優(yōu)點(diǎn):Python 編程的最好搭檔—VSCode 詳細(xì)指南。

請(qǐng)選擇以下任一種方式輸入命令安裝依賴

  1. Windows 環(huán)境 打開(kāi) Cmd (開(kāi)始-運(yùn)行-CMD)。
  2. MacOS 環(huán)境 打開(kāi) Terminal (command+空格輸入Terminal)。
  3. 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.
pip install tinydb

2.簡(jiǎn)單的增刪改查示例

初始化一個(gè)DB文件:

from tinydb import TinyDB
db = TinyDB('db.json')

這樣就在當(dāng)前文件夾下生成了一個(gè)名為 db.json 的數(shù)據(jù)庫(kù)文件。

往里面 插入數(shù)據(jù)

from tinydb import TinyDB
db = TinyDB('db.json')
db.insert({'type': 'apple', 'count': 7})
db.insert({'type': 'peach', 'count': 3})

可以看到,我們可以直接往數(shù)據(jù)庫(kù)里插入字典數(shù)據(jù),不需要任何處理。下面是批量插入的方法:

db.insert_multiple([
    {'name': 'John', 'age': 22},
    {'name': 'John', 'age': 37}])
db.insert_multiple({'int': 1, 'value': i} for i in range(2))

查詢所有數(shù)據(jù)

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

除了 .all() 我們還可以使用for循環(huán)遍歷db:

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

如果你需要 搜索特定數(shù)據(jù) ,可以使用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'}]

更新數(shù)據(jù):

from tinydb import TinyDB
db = TinyDB('db.json')
db.update({'foo': 'bar'})

# 刪除某個(gè)Key
from tinydb.operations import delete
db.update(delete('key1'), User.name == 'John')

刪除數(shù)據(jù)

刪除數(shù)據(jù)也可以使用類似的條件語(yǔ)句:

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

清空整個(gè)數(shù)據(jù)庫(kù):

from tinydb import TinyDB
db = TinyDB('db.json')
db.truncate()
db.all()
# []

3.高級(jí)查詢

除了點(diǎn)操作符訪問(wèn)數(shù)據(jù),你還可以用原生的dict訪問(wèn)表示法:

# 寫法1
db.search(User.country-code == 'foo')
# 寫法2
db.search(User['country-code'] == 'foo')

這兩種寫法是等效的。

另外在常見(jiàn)的查詢運(yùn)算符(==, <, >, ...)之外,TinyDB還支持where語(yǔ)句:

from tinydb import where
db.search(where('field') == 'value')

這等同于:

db.search(Query()['field'] == 'value')

這種語(yǔ)法還能訪問(wèn)嵌套字段:

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'}]}]

檢查單個(gè)項(xiàng)目是否包含在列表中:

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的介紹就到這里,你還可以訪問(wèn)他們的官方文檔,查看更多的使用方法:

https://tinydb.readthedocs.io/en/latest/usage.html

尤其是想基于TinyDB做些存儲(chǔ)優(yōu)化的同學(xué),你們可以詳細(xì)閱讀 Storage & Middleware 章節(jié)。

我們的文章到此就結(jié)束啦,如果你喜歡今天的Python 實(shí)戰(zhàn)教程,請(qǐng)持續(xù)關(guān)注Python實(shí)用寶典。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)庫(kù)
    +關(guān)注

    關(guān)注

    7

    文章

    3834

    瀏覽量

    64535
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4806

    瀏覽量

    68786
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4801

    瀏覽量

    84849
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    【建議收藏】Python庫(kù)大全

    照相機(jī)、圖像處理、特征提取、格式轉(zhuǎn)換的簡(jiǎn)介,可讀性強(qiáng)的接口(基于OpenCV)。1.DjangoFlask是個(gè)輕量級(jí)的Web應(yīng)用框架,使用Python
    發(fā)表于 09-06 15:58

    木棉花:輕量級(jí)偏好數(shù)據(jù)庫(kù)學(xué)習(xí)筆記--沈泳鑫

    輕量級(jí)偏好數(shù)據(jù)庫(kù)就全部完成了。結(jié)語(yǔ) 感興趣的可以步接步跟著編寫。更多學(xué)習(xí)資料學(xué)習(xí)筆記,請(qǐng)關(guān)注Awesome-HarmonyOS_木棉花
    發(fā)表于 09-04 14:30

    基于輕量級(jí)偏好數(shù)據(jù)庫(kù),實(shí)現(xiàn)存儲(chǔ)在本地應(yīng)用數(shù)據(jù)的訪問(wèn)及操作

    1. 介紹輕量級(jí)偏好數(shù)據(jù)庫(kù)輕量級(jí)存儲(chǔ),主要用于保存應(yīng)用的些常用配置。它是使用鍵值對(duì)的形式來(lái)存儲(chǔ)數(shù)據(jù)的,保存
    發(fā)表于 10-09 14:43

    HarmonyOS數(shù)據(jù)庫(kù)的相關(guān)資料下載

    1、HarmonyOS數(shù)據(jù)庫(kù)篇之輕量級(jí)數(shù)據(jù)存儲(chǔ)HarmonyOS中的數(shù)據(jù)庫(kù)存儲(chǔ)主要分為3種形式:1. 輕量級(jí)數(shù)據(jù)存儲(chǔ)2. 關(guān)系型數(shù)據(jù)庫(kù)
    發(fā)表于 03-28 11:13

    深度剖析OpenHarmony輕量級(jí)數(shù)據(jù)存儲(chǔ)

    、輕量級(jí)數(shù)據(jù)存儲(chǔ)的版本openharmony的輕量級(jí)數(shù)據(jù)存儲(chǔ)現(xiàn)有兩個(gè)版本,但是harmonyOS的官網(wǎng)上只有
    發(fā)表于 03-31 14:45

    Android游戲開(kāi)發(fā)之SQLite數(shù)據(jù)庫(kù)

    什么是SQLite,SQLite是輕量級(jí)數(shù)據(jù)庫(kù),它的設(shè)計(jì)目的是嵌入式,而且它占用的資源非常少,在嵌入式設(shè)備中,只需要幾百KB!!!!!
    發(fā)表于 02-21 09:59 ?1921次閱讀
    Android游戲開(kāi)發(fā)之SQLite<b class='flag-5'>數(shù)據(jù)庫(kù)</b>

    TinyDB輕量級(jí)數(shù)據(jù)庫(kù)有哪些特點(diǎn)呢

    TinyDB 是個(gè) Python 編寫輕量級(jí)數(shù)據(jù)庫(kù),
    的頭像 發(fā)表于 10-28 14:07 ?1496次閱讀

    個(gè)Python編寫輕量級(jí)數(shù)據(jù)庫(kù)

    TinyDB的目標(biāo)是降低小型 Python 應(yīng)用程序使用數(shù)據(jù)庫(kù)的難度,對(duì)于些簡(jiǎn)單程序而言與其用 SQL 數(shù)據(jù)庫(kù),不如就用TinyDB, 因?yàn)樗腥缦绿攸c(diǎn):
    的頭像 發(fā)表于 10-28 14:16 ?1125次閱讀

    如何創(chuàng)建個(gè)Sqlite數(shù)據(jù)庫(kù)?

    如何創(chuàng)建個(gè)Sqlite數(shù)據(jù)庫(kù)? Sqlite是輕量級(jí)、占用空間小、操作速度快的嵌入式數(shù)據(jù)庫(kù)
    的頭像 發(fā)表于 08-28 16:40 ?4494次閱讀

    輕量級(jí)數(shù)據(jù)庫(kù)有哪些

    輕量級(jí)數(shù)據(jù)庫(kù)有哪些 隨著互聯(lián)網(wǎng)和物聯(lián)網(wǎng)等新代信息技術(shù)的廣泛應(yīng)用,數(shù)據(jù)庫(kù)系統(tǒng)也變得越來(lái)越重要。人們對(duì)于數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)的可靠性、安全性和性能等要
    的頭像 發(fā)表于 08-28 16:41 ?5993次閱讀

    SQLite數(shù)據(jù)庫(kù)python的區(qū)別

    SQLite數(shù)據(jù)庫(kù)python的區(qū)別 SQLite是輕量級(jí)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),是
    的頭像 發(fā)表于 08-28 16:41 ?882次閱讀

    python有什么用 如何用python創(chuàng)建數(shù)據(jù)庫(kù)

    python有什么用 如何用python創(chuàng)建數(shù)據(jù)庫(kù) Python種高級(jí)編程語(yǔ)言,可以用于開(kāi)發(fā)各種類型的應(yīng)用程序和工具。它的廣泛應(yīng)用使它在
    的頭像 發(fā)表于 08-28 16:41 ?1206次閱讀

    python讀取數(shù)據(jù)庫(kù)數(shù)據(jù) python查詢數(shù)據(jù)庫(kù) python數(shù)據(jù)庫(kù)連接

    使用第三方庫(kù),包括MySQLDB、sqlite3、psycopg2等庫(kù)。其中MySQLDB是Python連接MySQL數(shù)據(jù)庫(kù)
    的頭像 發(fā)表于 08-28 17:09 ?1858次閱讀

    TinyDB :個(gè)Python編寫輕量級(jí)數(shù)據(jù)庫(kù)

    TinyDB 是個(gè) Python 編寫輕量級(jí)數(shù)據(jù)庫(kù),
    的頭像 發(fā)表于 10-21 10:22 ?1022次閱讀

    輕量級(jí)數(shù)據(jù)庫(kù)有哪些類型

    關(guān)系型數(shù)據(jù)庫(kù)是目前最常見(jiàn)的數(shù)據(jù)庫(kù)類型,它將數(shù)據(jù)以表的形式存儲(chǔ),并使用SQL語(yǔ)言進(jìn)行數(shù)據(jù)的管理和查詢。雖然關(guān)系型數(shù)據(jù)庫(kù)通常較為龐大和復(fù)雜,但
    的頭像 發(fā)表于 12-20 11:29 ?1298次閱讀