0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

数据分析与开发 ? 来源:数据分析与开发 ? 作者:数据分析与开发 ? 2022-10-28 14:16 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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.准备

开始之前,需要先安装它

pip installtinydb

2.简单的增删改查示例

初始化一个DB文件:

fromtinydb importTinyDB
db = TinyDB('db.json')

这样就在当前文件夹下生成了一个名为 `db.json` 的数据库文件。

往里面插入数据
fromtinydb importTinyDB
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} fori inrange(2))

查询所有数据

fromtinydb importTinyDB
db = TinyDB('db.json')
db.all()
# [{'count': 7, 'type': 'apple'}, {'count': 3, 'type': 'peach'}]
除了 .all() 我们还可以使用for循环遍历db:
fromtinydb importTinyDB
db = TinyDB('db.json')
foritem indb:
print(item)
# {'count': 7, 'type': 'apple'}
# {'count': 3, 'type': 'peach'}
如果你需要搜索特定数据,可以使用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'}]

更新数据:

fromtinydb importTinyDB
db = TinyDB('db.json')
db.update({'foo': 'bar'})

# 删除某个Key
fromtinydb.operations importdelete
db.update(delete('key1'), User.name == 'John')
删除数据

删除数据也可以使用类似的条件语句:

fromtinydb importTinyDB
db = TinyDB('db.json')
db.remove(Fruit.count < 5)
db.all()
# [{'count': 10, 'type': 'apple'}]
清空整个数据库:
fromtinydb importTinyDB
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语句:

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'))
TinyDB的介绍就到这里,你还可以访问他们的官方文档,查看更多的使用方法:

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

尤其是想基于TinyDB做些存储优化的同学,你们可以详细阅读 Storage & Middleware 章节。

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据库
    +关注

    关注

    7

    文章

    3939

    浏览量

    66567
  • 应用程序
    +关注

    关注

    38

    文章

    3338

    浏览量

    59142

原文标题:一个纯 Python 编写的轻量级数据库 -- TinyDB

文章出处:【微信号:DBDevs,微信公众号:数据分析与开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    数据库数据恢复—服务器异常断电导致Oracle数据库故障的数据恢复案例

    Oracle数据库故障: 某公司台服务器上部署Oracle数据库。服务器意外断电导致数据库报错,报错内容为“system01.dbf需要更多的恢复来保持
    的头像 发表于 07-24 11:12 ?155次阅读
    <b class='flag-5'>数据库</b><b class='flag-5'>数据</b>恢复—服务器异常断电导致Oracle<b class='flag-5'>数据库</b>故障的<b class='flag-5'>数据</b>恢复案例

    数据库数据恢复—MongoDB数据库文件丢失的数据恢复案例

    MongoDB数据库数据恢复环境: 台操作系统为Windows Server的虚拟机上部署MongoDB数据库。 MongoDB数据库
    的头像 发表于 07-01 11:13 ?182次阅读
    <b class='flag-5'>数据库</b><b class='flag-5'>数据</b>恢复—MongoDB<b class='flag-5'>数据库</b>文件丢失的<b class='flag-5'>数据</b>恢复案例

    数据库数据恢复—SQL Server数据库被加密如何恢复数据

    SQL Server数据库故障: SQL Server数据库被加密,无法使用。 数据库MDF、LDF、log日志文件名字被篡改。
    的头像 发表于 06-25 13:54 ?190次阅读
    <b class='flag-5'>数据库</b><b class='flag-5'>数据</b>恢复—SQL Server<b class='flag-5'>数据库</b>被加密如何恢复<b class='flag-5'>数据</b>?

    适用于MySQL和MariaDB的Python连接器:可靠的MySQL数据连接器和数据库

    和 MariaDB 数据库服务器以及托管数据库服务,以对存储的数据执行创建、读取、更新和删除操作。该解决方案完全实现了 Python DB API 2.0 规范,并作为 Window
    的头像 发表于 01-17 12:18 ?529次阅读
    适用于MySQL和MariaDB的<b class='flag-5'>Python</b>连接器:可靠的MySQL<b class='flag-5'>数据</b>连接器和<b class='flag-5'>数据库</b>

    MySQL数据库的安装

    MySQL是开源免费的关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。 MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面M
    的头像 发表于 01-14 11:25 ?602次阅读
    MySQL<b class='flag-5'>数据库</b>的安装

    适用于Oracle的Python连接器:可访问托管以及非托管的数据库

    适用于 Oracle 的 Python 连接器 适用于 Oracle 的 Python 连接器是种可靠的连接解决方案,用于从 Python 应用程序访问 Oracle
    的头像 发表于 01-14 10:30 ?505次阅读

    数据库是哪种数据库类型?

    数据库种部署在虚拟计算环境中的数据库,它融合了云计算的弹性和可扩展性,为用户提供高效、灵活的数据库服务。云数据库主要分为两大类:关系型
    的头像 发表于 01-07 10:22 ?532次阅读

    数据库数据恢复—Mysql数据库表记录丢失的数据恢复流程

    Mysql数据库故障: Mysql数据库表记录丢失。 Mysql数据库故障表现: 1、Mysql数据库表中无任何数据或只有部分
    的头像 发表于 12-16 11:05 ?668次阅读
    <b class='flag-5'>数据库</b><b class='flag-5'>数据</b>恢复—Mysql<b class='flag-5'>数据库</b>表记录丢失的<b class='flag-5'>数据</b>恢复流程

    数据库事件触发的设置和应用

    数据库无论对于生产管理还是很多的实际应用都非常重要。小编这次聊数据库事件触发的应用。示例使用了postgresql和Python
    的头像 发表于 12-13 15:14 ?678次阅读

    数据库数据恢复—MYSQL数据库ibdata1文件损坏的数据恢复案例

    mysql数据库故障: mysql数据库文件ibdata1、MYI、MYD损坏。 故障表现:1、数据库无法进行查询等操作;2、使用mysqlcheck和myisamchk无法修复数据库
    的头像 发表于 12-09 11:05 ?663次阅读

    EEPROM轻量级的简易类文件的数据读写:EEPROMFS

    小。 这里就给大家分享款EEPROM轻量级的简易类文件的数据读写:EEPROMFS 1 关于EEPROMFS EEPROMFS,基于EEPROM的简易类文件的
    的头像 发表于 11-15 16:31 ?1245次阅读
    EEPROM<b class='flag-5'>轻量级</b>的简易类文件的<b class='flag-5'>数据</b>读写<b class='flag-5'>库</b>:EEPROMFS

    数据库数据恢复—通过拼接数据库碎片恢复SQLserver数据库

    运行在存储上的SQLServer数据库,有1000多个文件,大小几十TB。数据库每10天生成
    的头像 发表于 10-31 13:21 ?740次阅读
    <b class='flag-5'>数据库</b><b class='flag-5'>数据</b>恢复—通过拼接<b class='flag-5'>数据库</b>碎片恢复SQLserver<b class='flag-5'>数据库</b>

    企业级数据库的配置和管理要求汇总

    企业级数据库配置需高性能硬件支撑,包括服务器、存储、网络及电源冗余,选用稳定DBMS与操作系统,注重索引与查询优化。管理上,强调数据安全,实施加密、访问控制与审计;确保高可用,配置容错机制与备份恢复;监控调优性能,规划容量与扩展性;追求易用性,简化日常管理与维护,确保
    的头像 发表于 09-27 10:50 ?521次阅读

    数据库数据恢复—SQL Server数据库出现823错误的数据恢复案例

    SQL Server数据库故障: SQL Server附加数据库出现错误823,附加数据库失败。数据库没有备份,无法通过备份恢复数据库
    的头像 发表于 09-20 11:46 ?729次阅读
    <b class='flag-5'>数据库</b><b class='flag-5'>数据</b>恢复—SQL Server<b class='flag-5'>数据库</b>出现823错误的<b class='flag-5'>数据</b>恢复案例

    软通动力数据库全栈服务,助力企业数据库体系全面升级

    。在企业节与"数博会"展区,软通动力受邀分享数据库专业服务全栈解决方案,并重点展示以全栈云服务为核心的数智化能力。 软通动力高级数据库服务专家刘江云在开放演讲中,分享了软通动力数据库专业服务全栈解决方案与服务优势。该方案构建了端
    的头像 发表于 09-05 15:30 ?610次阅读
    软通动力<b class='flag-5'>数据库</b>全栈服务,助力企业<b class='flag-5'>数据库</b>体系全面升级