和SQLite数据库对应的NoSQL数据库:TinyDB的详细使用(python3经典编程案例)

简介: 该文章详细介绍了TinyDB这一轻量级NoSQL数据库的使用方法,包括如何在Python3环境中安装、创建数据库、插入数据、查询、更新以及删除记录等操作,并提供了多个编程案例。

一. 介绍及第一个案例

TinyDB是用纯python编写的NoSQL数据库,和SQLite数据库对应。SQLite是小型,嵌入式的关系型数据库,而TinyDB是小型嵌入式的NoSQL数据库,它不需要外部服务器,也没有任何依赖,使用json文件存储数据。

如果程序处理的数据不多,TinyDB正合适,不需要安装程序,也不需要配置环境,TinyDB很适合小型项目。

TinyDB官方文档:https://tinydb.readthedocs.io/en/latest/index.html

官方使用案例:https://pypi.org/project/tinydb/#example-code

使用前需要安装:pip3 install tinydb

第一个案例:

from tinydb import TinyDB, Query
db = TinyDB('data.json')
User = Query()
db.insert({
   'name': 'John', 'age': 22})
search_data = db.search(User.name == 'John')
print(search_data)

二. 详细使用

1. 插入数据

from tinydb import TinyDB, Query


db = TinyDB('data.json')
# 一次写一条数据
db.insert({
   'type': 'apple', 'count': 7})
el = db.insert({
   "type": "peach", "count": 3})
print(el)  # 返回key
'''
    1、传入的数据形式应该是字典:{数据}
    2、{数据}作为value被传入,对应的key是 '1'、'2'、'3'...,依次排下去
    json文件的内容:
        {"_default": {
                "1": {"type": "apple", "count": 7},
                "2": {"type": "peach", "count": 3}}
        }
'''
# 一次写多条数据
# 用列表一次传多条数据,列表的元素是字典: [{},{},{}]
em = db.insert_multiple(
    [
        {
   'name': 'John', 'age': 22},
        {
   'name': 'John', 'age': 22},
        {
   "type": "peach", "count": 3}
    ]
)
print(em)  # 一次写多条,返回的是列表

2. 读数据

from tinydb import TinyDB, Query


db = TinyDB('data.json')
em = db.all()

for item in db:
    print(item)

print(em)  # 一次写多条,返回的是列表

3. 查询数据

from tinydb import TinyDB, Query

db = TinyDB('data.json')

Q = Query()
# 查询 (==, !=, >, >=, <, <=)
db.search(Q.type == 'apple')

db.insert({
   '名字': '桃子'})
p = db.search(Q.名字 == '桃子')
print(p)

4. 更改数据

from tinydb import TinyDB, Query

db = TinyDB('data.json')
Q = Query()

db.update({
   '名字':'苹果'}, Q.名字 =='桃子')
print(db.all())

5. 删除数据

from tinydb import TinyDB, Query
db = TinyDB('data.json')

Q = Query()
a = db.remove(Q.名字 == '苹果')
print(db.all())

三. 综合案例

1. 创建,插入,查询,删除和更新操作

from tinydb import TinyDB, Query, where
db = TinyDB('db.json')
# 插入两条数据
db.insert({
   'name': 'John', 'age': 22})
db.insert({
   'name': 'apple', 'age': 7})
# 输出所有记录
print(db.all())
# [{u'age': 22, u'name': u'John'}, {u'age': 7, u'name': u'apple'}]
# 查询
User = Query()
print(db.search(User.name == 'apple'))
# [{u'age': 7, u'name': u'apple'}]
# 查询
print(db.search(where('name') == 'apple'))
# 更新记录
db.update({
   'age': 11}, where('name') == 'apple')
# [{u'age': 10, u'name': u'apple'}]
# 删除age大于20的记录
db.remove(where('age') > 20)
# 清空数据库
# db.purge()

2. 插入并读取

from tinydb import TinyDB, where
from tinydb.storages import MemoryStorage


def testBasicOperation():
    def addone(x):
        x['int'] += 1
    default_db = TinyDB('default.json')
    real_table = default_db.table("real")

    print("{a}打开了数据库{tablename}{a}".format(
        a="*" * 20, tablename=default_db.name))

    default_db.insert({
   'int': 1, 'char': 'a'})
    default_db.insert({
   'int': 2, 'char': 'b'})
    default_db.insert({
   'int': 3, 'char': 'c'})
    default_db.insert({
   'int': 4, 'char': 'd'})
    real_table.insert({
   'int': 5, 'char': 'e'})
    real_table.insert({
   'int': 6, 'char': 'f'})
    real_table.insert({
   'int': 7, 'char': 'g'})
    real_table.insert({
   'int': 8, 'char': 'h'})

    # print('进行对每一个元素打印的操作:')
    # default_db.process_elements(lambda data, doc_id: print(data[doc_id]))

    print("deafult_db中每一个int字段加1")
    default_db.update(addone)

    # print('进行对每一个元素打印的操作:')
    # default_db.process_elements(lambda data, doc_id: print(data[doc_id]))

    print("default_db中有的所有表段为:", default_db.tables())
    print("default_db中所有的数据为:", default_db.all())

    # default_db.purge_tables()
    # print("{a}清除了所有表{a}".format(a="*" * 20))
    # print("db中有的所有表段为:", default_db.tables())
    # print("default_db中所有的数据为:", default_db.all())

    print("{a}关闭了表{tablename}{a}".format(
        a="*" * 20, tablename=default_db.name))
    default_db.close()


def testMemoryStorage():
    db = TinyDB(storage=MemoryStorage)
    db.insert({
   'data': 5})
    print(db.search(where('data') == 5))


# testMemoryStorage()

testBasicOperation()
相关文章
|
5月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
620 7
|
8月前
|
存储 Oracle 关系型数据库
服务器数据恢复—光纤存储上oracle数据库数据恢复案例
一台光纤服务器存储上有16块FC硬盘,上层部署了Oracle数据库。服务器存储前面板2个硬盘指示灯显示异常,存储映射到linux操作系统上的卷挂载不上,业务中断。 通过storage manager查看存储状态,发现逻辑卷状态失败。再查看物理磁盘状态,发现其中一块盘报告“警告”,硬盘指示灯显示异常的2块盘报告“失败”。 将当前存储的完整日志状态备份下来,解析备份出来的存储日志并获得了关于逻辑卷结构的部分信息。
|
8月前
|
NoSQL MongoDB 数据库
数据库数据恢复—MongoDB数据库数据恢复案例
MongoDB数据库数据恢复环境: 一台操作系统为Windows Server的虚拟机上部署MongoDB数据库。 MongoDB数据库故障: 工作人员在MongoDB服务仍然开启的情况下将MongoDB数据库文件拷贝到其他分区,数据复制完成后将MongoDB数据库原先所在的分区进行了格式化操作。 结果发现拷贝过去的数据无法使用。管理员又将数据拷贝回原始分区,MongoDB服务仍然无法使用,报错“Windows无法启动MongoDB服务(位于 本地计算机 上)错误1067:进程意外终止。”
|
5月前
|
数据采集 监控 数据库
Python异步编程实战:爬虫案例
🌟 蒋星熠Jaxonic,代码为舟的星际旅人。从回调地狱到async/await协程天堂,亲历Python异步编程演进。分享高性能爬虫、数据库异步操作、限流监控等实战经验,助你驾驭并发,在二进制星河中谱写极客诗篇。
Python异步编程实战:爬虫案例
|
11月前
|
SQL 数据库 数据安全/隐私保护
数据库数据恢复——sql server数据库被加密的数据恢复案例
SQL server数据库数据故障: SQL server数据库被加密,无法使用。 数据库MDF、LDF、log日志文件名字被篡改。 数据库备份被加密,文件名字被篡改。
|
6月前
|
数据采集 关系型数据库 MySQL
python爬取数据存入数据库
Python爬虫结合Scrapy与SQLAlchemy,实现高效数据采集并存入MySQL/PostgreSQL/SQLite。通过ORM映射、连接池优化与批量提交,支持百万级数据高速写入,具备良好的可扩展性与稳定性。
|
6月前
|
SQL 关系型数据库 MySQL
Mysql数据恢复—Mysql数据库delete删除后数据恢复案例
本地服务器,操作系统为windows server。服务器上部署mysql单实例,innodb引擎,独立表空间。未进行数据库备份,未开启binlog。 人为误操作使用Delete命令删除数据时未添加where子句,导致全表数据被删除。删除后未对该表进行任何操作。需要恢复误删除的数据。 在本案例中的mysql数据库未进行备份,也未开启binlog日志,无法直接还原数据库。
|
6月前
|
存储 数据库 开发者
Python SQLite模块:轻量级数据库的实战指南
本文深入讲解Python内置sqlite3模块的实战应用,涵盖数据库连接、CRUD操作、事务管理、性能优化及高级特性,结合完整案例,助你快速掌握SQLite在小型项目中的高效使用,是Python开发者必备的轻量级数据库指南。
510 0
|
10月前
|
SQL 数据库 开发者
Python中使用Flask-SQLAlchemy对数据库的增删改查简明示例
这样我们就对Flask-SQLAlchemy进行了一次简明扼要的旅程,阐述了如何定义模型,如何创建表,以及如何进行基本的数据库操作。希望你在阅读后能对Flask-SQLAlchemy有更深入的理解,这将为你在Python世界中从事数据库相关工作提供极大的便利。
857 77
|
6月前
|
设计模式 缓存 运维
Python装饰器实战场景解析:从原理到应用的10个经典案例
Python装饰器是函数式编程的精华,通过10个实战场景,从日志记录、权限验证到插件系统,全面解析其应用。掌握装饰器,让代码更优雅、灵活,提升开发效率。
415 0

推荐镜像

更多