name: sqlite-ops description: “Python项目中SQLite数据库的模式 - 状态管理、缓存和异步操作。触发词:sqlite, sqlite3, aiosqlite, 本地数据库, 数据库模式, 迁移, WAL模式。” compatibility: “需要Python 3.8+,并带有sqlite3(标准库)或用于异步的aiosqlite。” allowed-tools: “Read Write Bash”
SQLite 操作
Python项目中SQLite数据库的模式。
快速连接
import sqlite3
def get_connection(db_path: str) -> sqlite3.Connection:
conn = sqlite3.connect(db_path, check_same_thread=False)
conn.row_factory = sqlite3.Row # 字典式访问
conn.execute("PRAGMA journal_mode=WAL") # 更好的并发性
conn.execute("PRAGMA foreign_keys=ON")
return conn
上下文管理器模式
from contextlib import contextmanager
@contextmanager
def db_transaction(conn: sqlite3.Connection):
try:
yield conn
conn.commit()
except Exception:
conn.rollback()
raise
WAL 模式
启用以支持并发读写:
conn.execute("PRAGMA journal_mode=WAL")
| 模式 | 读取 | 写入 | 最佳适用场景 |
|---|---|---|---|
| DELETE (默认) | 写入时阻塞 | 单线程 | 简单脚本 |
| WAL | 并发 | 单线程 | Web应用,MCP服务器 |
常见问题
| 问题 | 解决方案 |
|---|---|
| “数据库被锁定” | 使用WAL模式 |
| 查询缓慢 | 添加索引,检查EXPLAIN QUERY PLAN |
| 线程安全 | 使用 check_same_thread=False |
| 外键未强制执行 | 运行 PRAGMA foreign_keys=ON |
CLI 快速参考
sqlite3 mydb.sqlite # 打开数据库
.tables # 显示表
.schema items # 显示模式
.headers on && .mode csv && .output data.csv # 导出CSV
VACUUM; # 回收空间
适用场景
- 本地状态/配置存储
- 缓存层
- 事件日志
- MCP服务器持久化
- 中小型数据集
附加资源
有关详细模式,请加载:
./references/schema-patterns.md- 状态、缓存、事件、队列表设计./references/async-patterns.md- aiosqlite CRUD、批处理、连接池./references/migration-patterns.md- 版本迁移、JSON处理