Python轻量级NoSQL数据库TinyDB

news/2024/12/23 22:02:03/

https://github.com/msiemens/tinydb

TinyDB 是一个纯 Python 实现的嵌入式 NoSQL 数据库,适用于存储小型数据集合,尤其适合用于轻量级应用、个人项目或原型开发。

一、安装

python">pip install tinydb

二.基本操作

1.创建和初始化数据库

python">from tinydb import TinyDB# 创建一个数据库(文件名为 db.json)
db = TinyDB('db.json')

2. 插入数据

TinyDB 支持字典格式的数据插入。可以使用 insertinsert_multiple 方法来插入单条或多条数据。

python"># 插入单条数据
db.insert({'name': 'Alice', 'age': 30})# 插入多条数据
db.insert_multiple([{'name': 'Bob', 'age': 25},{'name': 'Charlie', 'age': 35}
])
{"_default": {"1": {"name": "Alice","age": 30},"2": {"name": "Bob","age": 25},"3": {"name": "Charlie","age": 35}}
}

3. 查询数据

查询通过 Query 类来构建查询条件。

python">from tinydb import Query# 创建一个查询对象
User = Query()# 查询 name 为 Alice 的记录
result = db.search(User.name == 'Alice')# 查询 age 大于 30 的记录
result = db.search(User.age > 30)print(result)

4. 更新数据

你可以使用 update 方法来更新数据。更新操作是基于查询结果执行的。

python"># 更新 Alice 的年龄为 31
db.update({'age': 31}, User.name == 'Alice')# 批量更新
db.update({'age': 40}, User.age < 30)

5. 删除数据

删除数据的操作也非常简单,可以使用 remove 方法删除符合条件的记录。

python"># 删除 name 为 Bob 的记录
db.remove(User.name == 'Bob')# 删除所有 age 小于 30 的记录
db.remove(User.age < 30)

6. 排序和分页

TinyDB 提供了基本的排序功能。可以使用 order_by 方法来对查询结果进行排序:

python"># 按年龄升序排序
result = db.all()  # 获取所有记录
sorted_result = sorted(result, key=lambda x: x['age'])print(sorted_result)

7. 数据库备份和恢复

TinyDB 数据库是存储在 JSON 文件中的,可以很容易地备份或恢复。只需要简单的复制文件即可实现。

python">import shutil# 备份数据库
shutil.copy('db.json', 'db_backup.json')# 恢复数据库
shutil.copy('db_backup.json', 'db.json')

三、高级使用

1. 使用不同的存储方案

TinyDB 支持多种存储方案,默认使用的是 JSONStorage。你还可以使用 MemoryStorage 来改变数据的存储方式。

python">from tinydb.storages import JSONStorage# 使用默认存储
db = TinyDB('db.json', storage=JSONStorage)

2. 支持嵌套数据

TinyDB 支持存储嵌套的数据结构,可以是字典、列表等。例如:

python">db.insert({'name': 'David','address': {'city': 'New York','zip': '10001'}
})

你可以通过查询嵌套字段进行过滤:

python">result = db.search(User.address['city'] == 'New York')

3. 使用 Index

TinyDB 也支持为字段创建索引,从而加速查询。使用索引时,可以显著提高查询性能,特别是当数据量增加时。

python"># 创建索引
db.create_index(['name'])# 查询时使用索引
result = db.search(User.name == 'Alice')

总结

TinyDB 在单线程环境中非常轻便和易用,但在多线程环境下需要特别小心。使用线程锁来保证每次只有一个线程对数据库进行操作,是避免数据冲突和写入混乱的关键。在并发较低的小型项目中,TinyDB 依然是一个不错的选择,但如果并发要求较高,建议考虑使用其他数据库系统。


http://www.ppmy.cn/news/1557570.html

相关文章

调用钉钉接口发送消息

调用钉钉接口发送消息 通过创建钉钉开放平台创建H5小程序&#xff0c;通过该小程序可以实现向企业内的钉钉用户发送消息&#xff08;消息是以工作通知的形式发送&#xff09; 1、目前仅支持发送文本消息&#xff0c;相同内容的文本只能成功发送一次&#xff0c;但是接口返回发…

陪诊小程序搭建,打造一站式陪诊服务

当下&#xff0c;陪诊市场正在持续火热发展&#xff0c;在全国医疗行业中&#xff0c;陪诊师成为了一个重要的就医方式。陪诊师的出现在快节奏生活下显得尤为重要&#xff0c;为不少没有时间陪老人去医院的家庭以及对医院不熟悉的提供了便利&#xff0c;满足了众多患者及其家属…

springmvc跳转不经过视图解析器,controller保存数据,controller层返回json数据,拦截器,全局异常处理,文件上传含本地和阿里oss

1.跳转不经过视图解析器 return "forward:/main.jsp";//使用转发跳转到指定路径&#xff0c;无需经过视图解析器 return "redirect:/main.jsp";//使用重定向跳转到指定路径&#xff0c;无需经过视图解析器 2.controller保存数据 request session M…

JavaSE 总复习:夯实基础,迈向进阶之路

我的个人主页 一、数据类型与变量 二、控制语句 三、数组 四、面向对象编程&#xff08;OOP&#xff09; 五、异常处理 六、常用类库 七、输入输出流 八、总结 在 Java 编程的学习旅程中&#xff0c;JavaSE&#xff08;Java 标准版&#xff09;是基石般的存在。它涵盖…

软件工程复习重点(第一章 软件工程概述)

1.什么是软件&#xff1f;软件有什么特点&#xff1f; 软件分类&#xff1f; 计算机软件--计算机系统中的程序、数据及其文档的统称。 软件&#xff1d;程序数据文档 表现形式&#xff1a;逻辑实体、抽象性 生产方式&#xff1a;与硬件不同、无明显的制造过程、定制 维护机制&a…

【WiFi】WiFi6 5G 802.11ax 最大速率对应表

5GHz 频段 1x1 MIMO 速率 20MHz 信道宽度 MCS 0: 8.6 MbpsMCS 1: 17.2 MbpsMCS 2: 25.8 MbpsMCS 3: 34.4 MbpsMCS 4: 51.6 MbpsMCS 5: 68.8 MbpsMCS 6: 77.4 MbpsMCS 7: 86.0 MbpsMCS 8: 103.2 MbpsMCS 9: 114.7 MbpsMCS 10: 129.0 MbpsMCS 11: 143.4 Mbps 40MHz 信道宽度 …

STM32 HAL库之串口接收不定长字符

背景 在项目开发过程中&#xff0c;经常会使用MCU的串口与外界进行通信&#xff0c;例如两个单片机之间TTL电平型串口通信&#xff0c;单片机与成熟电路模块之间的串口通信等等.... 如何高效的使用串口是开发人员必须关注的问题。 STM32的HAL库为我们提供了三种串口通信机制&am…

大数据新视界 -- Hive 数据仓库:架构深度剖析与核心组件详解(上)(1 / 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…