和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()
相关文章
|
2月前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
1月前
|
存储 NoSQL 关系型数据库
【赵渝强老师】什么是NoSQL数据库?
随着大数据技术的兴起,NoSQL数据库(Not Only SQL)得到广泛应用。它不局限于二维表结构,允许数据冗余。常见的NoSQL数据库包括Redis、MongoDB和HBase。Redis是基于内存的高性能数据库,采用单线程模型和多路复用I/O,支持高效的数据结构。MongoDB使用BSON格式存储文档,查询语言强大,类似关系型数据库。HBase基于HDFS,适合数据分析,采用列式存储,支持灵活的列族设计。视频讲解及更多内容见下文。
193 79
|
8天前
|
存储 SQL 关系型数据库
服务器数据恢复—云服务器上mysql数据库数据恢复案例
某ECS网站服务器,linux操作系统+mysql数据库。mysql数据库采用innodb作为默认存储引擎。 在执行数据库版本更新测试时,操作人员误误将在本来应该在测试库执行的sql脚本在生产库上执行,导致生产库上部分表被truncate,还有部分表中少量数据被delete。
48 25
|
2月前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
126 80
|
12天前
|
存储 运维 数据挖掘
虚拟化数据恢复—误还原快照导致虚拟机上数据库丢失的数据恢复案例
虚拟化数据恢复环境&故障: vmfs文件系统,存储的数据是SqlServer数据库及其他办公文件。 工作人员误将快照还原,导致了SqlServer数据库数据的丢失,需要恢复原来的SqlServer数据库文件。
48 22
|
23天前
|
存储 缓存 Java
Python高性能编程:五种核心优化技术的原理与Python代码
Python在高性能应用场景中常因执行速度不及C、C++等编译型语言而受质疑,但通过合理利用标准库的优化特性,如`__slots__`机制、列表推导式、`@lru_cache`装饰器和生成器等,可以显著提升代码效率。本文详细介绍了这些实用的性能优化技术,帮助开发者在不牺牲代码质量的前提下提高程序性能。实验数据表明,这些优化方法能在内存使用和计算效率方面带来显著改进,适用于大规模数据处理、递归计算等场景。
58 5
Python高性能编程:五种核心优化技术的原理与Python代码
|
5天前
|
存储 NoSQL MongoDB
数据库数据恢复—MongoDB数据库迁移过程中丢失文件的数据恢复案例
某单位一台MongoDB数据库由于业务需求进行了数据迁移,数据库迁移后提示:“Windows无法启动MongoDB服务(位于 本地计算机 上)错误1067:进程意外终止。”
|
1月前
|
数据库 Windows
SqlServer数据恢复—SqlServer数据库所在分区损坏的数据恢复案例
一块硬盘上存放的SqlServer数据库,windows server操作系统+NTFS文件系统。由于误操作导致分区损坏,需要恢复硬盘里的SqlServer数据库数据。
|
2月前
|
Python
[oeasy]python055_python编程_容易出现的问题_函数名的重新赋值_print_int
本文介绍了Python编程中容易出现的问题,特别是函数名、类名和模块名的重新赋值。通过具体示例展示了将内建函数(如`print`、`int`、`max`)或模块名(如`os`)重新赋值为其他类型后,会导致原有功能失效。例如,将`print`赋值为整数后,无法再用其输出内容;将`int`赋值为整数后,无法再进行类型转换。重新赋值后,这些名称失去了原有的功能,可能导致程序错误。总结指出,已有的函数名、类名和模块名不适合覆盖赋新值,否则会失去原有功能。如果需要使用类似的变量名,建议采用其他命名方式以避免冲突。
52 14
|
2月前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
385 15

推荐镜像

更多