SQLite 和 TinyDB 技术文档
一、SQLite
1. 特性
-
轻量级:SQLite 是一个轻量级的嵌入式数据库,无需独立的服务器进程,可以直接集成到应用程序中。
-
跨平台:支持多种操作系统,包括 Windows、Linux、macOS 等。
-
事务支持:提供事务处理功能,确保数据的一致性和完整性。
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 数据库,适用于需要快速搭建简单数据库环境的场景。在选择数据库时,需要根据具体的需求和应用场景来进行选择。