和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()
相关文章
|
1月前
|
存储 NoSQL 关系型数据库
【赵渝强老师】什么是NoSQL数据库?
随着大数据技术的兴起,NoSQL数据库(Not Only SQL)得到广泛应用。它不局限于二维表结构,允许数据冗余。常见的NoSQL数据库包括Redis、MongoDB和HBase。Redis是基于内存的高性能数据库,采用单线程模型和多路复用I/O,支持高效的数据结构。MongoDB使用BSON格式存储文档,查询语言强大,类似关系型数据库。HBase基于HDFS,适合数据分析,采用列式存储,支持灵活的列族设计。视频讲解及更多内容见下文。
207 79
|
4月前
|
存储 监控 NoSQL
九大核心NoSQL数据库及使用场景详解
【10月更文挑战第6天】在当今大数据与云计算飞速发展的时代,NoSQL数据库以其灵活的数据模型、可扩展性和高性能,成为了众多应用场景下的首选。本文将为您详细介绍九大核心NoSQL数据库及其典型使用场景,帮助您在工作和学习中更好地选择和应用。
165 3
|
3月前
|
存储 缓存 NoSQL
常见的 NoSQL 数据库有哪些?
常见的 NoSQL 数据库有哪些?
188 59
|
2月前
|
SQL Java 数据库连接
JDBC编程安装———通过代码操控数据库
本文,教你从0开始学习JBCD,包括驱动包的下载安装调试设置,以及java是如何通过JBDC实现对数据库的操作,以及代码的分析,超级详细
|
3月前
|
数据库连接 Go 数据库
Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性
本文探讨了Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性;防御编程则强调在编码时考虑各种错误情况,确保程序健壮性。文章详细介绍了这两种技术在Go语言中的实现方法及其重要性,旨在提升软件质量和可靠性。
59 1
|
4月前
|
存储 SQL JSON
介绍一下RDBMS和NoSQL数据库之间的区别
【10月更文挑战第21天】介绍一下RDBMS和NoSQL数据库之间的区别
205 2
|
4月前
|
存储 SQL NoSQL
数据库技术深度探索:从关系型到NoSQL的演变
【10月更文挑战第21天】数据库技术深度探索:从关系型到NoSQL的演变
128 1
|
4月前
|
存储 NoSQL 搜索推荐
nosql
【10月更文挑战第14天】nosql
50 2
|
4月前
|
存储 关系型数据库 数据库
轻量级数据库的利器:Python 及其内置 SQLite 简介
轻量级数据库的利器:Python 及其内置 SQLite 简介
103 3
|
4月前
|
数据库连接 Linux 数据库
GBase 8s数据库连接 – Python
GBase 8s数据库连接 – Python

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等