两款轻量级数据库SQLite 和 TinyDB,简单!实用!

ops/2024/12/25 21:03:17/

SQLite 和 TinyDB 技术文档

一、SQLite

1. 特性

  • 轻量级:SQLite 是一个轻量级的嵌入式数据库,无需独立的服务器进程,可以直接集成到应用程序中。

  • 跨平台:支持多种操作系统,包括 Windows、Linux、macOS 等。

  • 关系型数据库:使用 SQL 语言进行数据操作,支持表、索引、视图等关系型数据库的特性。

  • 事务支持:提供事务处理功能,确保数据的一致性和完整性。

2. 应用场景

  • 小型应用程序:适用于小型桌面应用、移动应用和嵌入式系统等,对数据库性能要求不高的场景。

  • 临时数据存储:可以作为临时数据存储的解决方案,例如在数据处理过程中存储中间结果。

  • 单用户应用:对于单用户的应用程序,SQLite 是一个简单而有效的数据库选择。

3. 简单使用

  • 安装:通常无需安装,许多编程语言都内置了对 SQLite 的支持。

  • 创建数据库和表:

import sqlite3
​
# 连接到数据库,如果数据库不存在,则会自动创建
conn = sqlite3.connect('example.db')
​
# 创建一个游标对象
c = conn.cursor()
​
# 创建一个表
c.execute('''CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT,age INTEGER)''')
​
# 提交更改
conn.commit()
​
# 关闭连接
conn.close()
  • 插入数据:

import sqlite3
​
conn = sqlite3.connect('example.db')
c = conn.cursor()
​
# 插入一条数据
c.execute("INSERT INTO users (name, age) VALUES ('Alice', 30)")
​
# 提交更改
conn.commit()
​
conn.close()
  • 查询数据:

import sqlite3
​
conn = sqlite3.connect('example.db')
c = conn.cursor()
​
# 查询所有数据
c.execute("SELECT * FROM users")
rows = c.fetchall()
​
for row in rows:print(row)
​
conn.close()

4. 高级使用

  • 索引:可以为表中的列创建索引,提高查询性能。

import sqlite3
​
conn = sqlite3.connect('example.db')
c = conn.cursor()
​
# 为 name 列创建索引
c.execute("CREATE INDEX idx_name ON users (name)")
​
conn.commit()
conn.close()
  • 事务处理:可以使用事务来确保数据的一致性。

import sqlite3
​
conn = sqlite3.connect('example.db')
c = conn.cursor()
​
try:# 开始事务conn.execute("BEGIN")
​# 执行多个数据库操作c.execute("INSERT INTO users (name, age) VALUES ('Bob', 25)")c.execute("INSERT INTO users (name, age) VALUES ('Charlie', 35)")
​# 提交事务conn.commit()
except Exception as e:# 回滚事务conn.rollback()
finally:conn.close()
  • 存储过程和函数:可以创建存储过程和函数,提高数据库的可维护性和可扩展性。

import sqlite3
​
conn = sqlite3.connect('example.db')
c = conn.cursor()
​
# 创建一个存储过程
c.execute("CREATE PROCEDURE add_user(name TEXT, age INTEGER) BEGIN INSERT INTO users (name, age) VALUES (name, age); END")
​
# 调用存储过程
c.execute("CALL add_user('David', 40)")
​
conn.commit()
conn.close()

二、TinyDB

1. 特性

  • 轻量级:TinyDB 是一个轻量级的 NoSQL 数据库,适用于小型项目和临时数据存储。

  • 纯 Python 实现:无需安装额外的数据库服务器,易于部署和使用。

  • 文档型数据库:以 JSON 格式存储数据,每个文档都是一个独立的 JSON 对象。

  • 简单易用:提供了简单的 API,易于学习和使用。

2. 应用场景

  • 小型项目:适用于小型的 Python 项目,例如脚本、工具和小型 Web 应用等。

  • 临时数据存储:可以作为临时数据存储的解决方案,例如在数据处理过程中存储中间结果。

  • 测试和原型开发:在测试和原型开发阶段,TinyDB 可以快速搭建一个简单的数据库环境。

3. 简单使用

  • 安装:可以使用 pip 安装 TinyDB。

pip install tinydb
from tinydb import TinyDB
​
# 创建一个数据库
db = TinyDB('example.json')
​
# 创建一个表
table = db.table('users')
  • 插入数据:

from tinydb import TinyDB
​
db = TinyDB('example.json')
table = db.table('users')
​
# 插入一条数据
table.insert({'name': 'Alice', 'age': 30})
  • 查询数据:

from tinydb import TinyDB, Query
​
db = TinyDB('example.json')
table = db.table('users')
​
# 查询所有数据
rows = table.all()
​
for row in rows:print(row)
​
# 查询特定条件的数据
User = Query()
result = table.search(User.name == 'Alice')
print(result)

4. 高级使用

  • 索引:TinyDB 不支持传统的数据库索引,但可以通过使用自定义的查询函数来实现类似的功能。

from tinydb import TinyDB, Query
​
db = TinyDB('example.json')
table = db.table('users')
​
def search_by_name(name):return table.search(Query().name == name)
​
result = search_by_name('Alice')
print(result)
  • 事务处理:TinyDB 不提供事务处理功能,但可以通过手动管理数据的插入、更新和删除操作来实现类似的效果。

from tinydb import TinyDB
​
db = TinyDB('example.json')
table = db.table('users')
​
try:# 插入数据table.insert({'name': 'Bob', 'age': 25})table.insert({'name': 'Charlie', 'age': 35})
except Exception as e:# 发生错误时,手动回滚操作table.remove(Query().name == 'Bob')table.remove(Query().name == 'Charlie')
finally:db.close()
  • 存储过程和函数:TinyDB 不支持存储过程和函数,但可以通过定义自定义的 Python 函数来实现类似的功能。

from tinydb import TinyDB
​
db = TinyDB('example.json')
table = db.table('users')
​
def add_user(name, age):table.insert({'name': name, 'age': age})
​
add_user('David', 40)

三、总结

SQLite 和 TinyDB 都是轻量级的数据库解决方案,适用于不同的应用场景。SQLite 是一个关系型数据库,适用于需要使用 SQL 语言进行数据操作的场景;TinyDB 是一个文档型 NoSQL 数据库,适用于需要快速搭建简单数据库环境的场景。在选择数据库时,需要根据具体的需求和应用场景来进行选择。


http://www.ppmy.cn/ops/144650.html

相关文章

Vue常用指令

1. 插值表达式 {{}} <script setup> let msg="hello vue!" </script> <template> <h1>{{ msg }}--{{ 1+1 }}--{{ msg+sb }}</h1> </template> 2. Vue 常用指令 (以v- 开头) 2.1 v-html 替换标签元素内容,包含标签…

20240921解决使用PotPlayer在WIN10电脑播放4K分辨率10bit的视频出现偏色的问题

20240921解决使用PotPlayer在WIN10电脑播放4K分辨率10bit的视频出现偏色的问题 2024/9/21 10:40 缘起&#xff1a;常见的问题&#xff0c;你下载视频的时候&#xff0c;4K分辨率的视频播放的时候出现偏色异常&#xff0c;但是1080p分辨率的正常呀&#xff01; 偏色的识别&…

《VQ-VAE》:Stable Diffusion设计的架构源泉

文章目录 阅读本文你可以了解到1 VQ-VAE的核心思想1.1 为什么VQ-VAE想要把图像编码成离散向量&#xff1f;1.2 VQ-VAE引入codebook(即embedding space嵌入空间&#xff09;1.3 VQ-VAE的工作过程 2 VQ-VAE实现方法2.1 VQ-VAE的编码器怎么输出离散向量。2.2 VQ-VAE怎么优化编码器…

华为云计算HCIE笔记02

第二章&#xff1a;华为云Stack规划设计 交付总流程 准备工作&#xff1a;了解客户的基本现场&#xff0c;并且对客户的需求有基本的认知。 HLD方案BOQ报价设备采购和设备上架 2.安装部署流程 硬件架构设计 硬件设备选配 设备上架与初始化配置 准备相关资料&#xff08;自动下载…

【笔记】Ubuntu连finalshell超时 解决:下载openssh

需要下载 否则链接finalshell时就会 连接主机... java.net.ConnectException: Connection refused: connect 在第三步编辑ssh配置文件的时候 使用 /Password 回车 关键字查询定位 下面的字段 将前面的#去掉 重启ssh服务 sudo /etc/init.d/ssh restart finalshell连接ubunt…

【YashanDB知识库】Mybatis-Plus调用YashanDB怎么设置分页

本文内容来自YashanDB官网&#xff0c;原文内容请见 https://www.yashandb.com/newsinfo/7802958.html?templateId1718516 问题现象 Mybatis-Plus是Mybatis的增强工具&#xff0c;旨在简化开发者的CRUD操作&#xff0c;目前被广泛应用&#xff0c;Mybatis-Plus框架适配了多种…

Github 2024-12-20 Java开源项目日报 Top10

根据Github Trendings的统计,今日(2024-12-20统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目9Python项目2TypeScript项目1Apollo - 可靠的微服务配置管理系统 创建周期:2940 天开发语言:Java协议类型:Apache License 2.0Star数…

部署 Apache Samza 和 Apache Kafka

部署 Apache Samza 和 Apache Kafka 的流处理系统可以分为以下几个步骤,涵盖环境准备、部署细节和生产环境的优化。 1. 环境准备 硬件要求 Kafka Broker:至少 3 台服务器,建议每台服务器配备 4 核 CPU、16GB 内存和高速磁盘。Samza 部署节点:根据任务规模,至少准备 2 台…