基于 SQLite 结构化 Block 存储 的高性能文档管理系统,支持 Word 文档的解析、编辑和导出。
版本: 2.0.0
更新日期: 2026-07-03
# 创建数据库
CREATE DATABASE ax_backend;
# 配置环境变量 (.env)
DATABASE_URL=postgresql://postgres:password@localhost:5432/ax_backend
TEMP_DIR=./tmp
# 安装依赖
pip install -r requirements.txt
# 初始化数据库
alembic upgrade head
python quick_test.py
uvicorn app.main:app --reload
# API 文档: http://localhost:8000/docs
Word 文档 → Block 列表 → 独立 SQLite 数据库
优势:
三层样式继承:
Word 样式 (word_style) → Block 样式 (style) → 片段样式 (content[].style)
支持的样式属性:
font_name, font_size, bold, italic, underline, coloralign (left, center, right, justify)width, height, unit, alignPOST /api/v1/documents # 上传 Word 文档
GET /api/v1/documents/{id} # 获取文档(支持 ?includeBlocks=true)
DELETE /api/v1/documents/{id} # 删除文档
GET /api/v1/documents # 列出文档
GET /api/v1/documents/{id}/blocks # 获取所有 blocks
GET /api/v1/documents/{id}/blocks/{blockId} # 获取单个 block
PUT /api/v1/documents/{id}/blocks/{blockId} # 更新 block
DELETE /api/v1/documents/{id}/blocks/{blockId} # 删除 block
GET /api/v1/documents/{id}/blocks/search # 搜索 blocks
GET /api/v1/documents/{id}/blocks/toc # 获取目录树
GET /api/v1/documents/{id}/blocks/stats # 获取统计信息
POST /api/v1/export # 导出 Word 文档
GET /api/v1/export-records # 导出记录列表
from app.services.content_db import ContentDB
with ContentDB(db_path) as content_db:
blocks = content_db.get_blocks()
content_db.update_block(block_id, {"content": "新内容"})
results = content_db.search_blocks("关键词")
from app.services.word_parser import parse_word_to_blocks
blocks = parse_word_to_blocks(Path("document.docx"))
# 返回 Block 列表
from app.services.document_service import DocumentService
# 创建文档 (Word → Blocks → SQLite)
doc = await svc.create_document(CreateDocumentRequest(...))
# 获取文档(可选加载 blocks)
doc = await svc.get_document(doc_id, include_blocks=True)
from app.services.export_service import blocks_to_docx_bytes
# Blocks → Word
docx_bytes = blocks_to_docx_bytes(blocks, style_map, style_data)
ax-backend-v1/
├── app/
│ ├── api/v1/ # API 路由
│ ├── core/ # 核心配置
│ ├── models/ # 数据库模型
│ ├── schemas/ # Pydantic Schemas
│ └── services/ # 业务逻辑
│ ├── content_db.py # SQLite 操作
│ ├── word_parser.py # Word 解析
│ ├── document_service.py # 文档服务
│ └── export_service.py # 导出服务
├── migrations/ # Alembic 迁移
├── docs/ # 设计文档
├── tmp/ # SQLite 数据库存储
│ └── {user_id}/sqlite/{doc_id}.db
└── requirements.txt
| 操作 | 时间复杂度 | 说明 |
|---|---|---|
| 查询单个标题 | O(log n) | 索引查询 |
| 构建目录树 | O(n) | SQL 查询 |
| 更新单个段落 | O(1) | UPDATE 单行 |
| 插入新段落 | O(1) | INSERT 单行 |
| 搜索 blocks | O(log n) | WHERE 查询 |
{
"content": [
{"text": "普通文字", "style": {}},
{"text": "红色加粗", "style": {"color": "FF0000", "bold": true}}
]
}
documents.content_db_path -- SQLite 文件路径
tmp/
└── {user_id}/
└── sqlite/
└── {doc_id}.db -- 独立 SQLite 数据库
CREATE TABLE document_blocks (
id TEXT PRIMARY KEY,
block_order INTEGER NOT NULL,
type TEXT NOT NULL,
level INTEGER,
"index" INTEGER,
content TEXT,
word_style TEXT,
style TEXT,
metadata TEXT
);
A: tmp/{user_id}/sqlite/{doc_id}.db
A: block['type'] == 'paragraph' and block['content'] == ''
A: 理论无限制,SQLite 单文件最大 281 TB
A: 备份两部分:
documents 表tmp/ 目录下的所有 .db 文件python test_sqlite_migration.py
python quick_test.py
python test_style_extraction.py
python test_empty_lines.py
alias 参数废弃警告validation_alias 和 serialization_aliasapp/schemas/document.py, app/schemas/export.py, app/schemas/block.pyapp/services/export_service.pyis_empty 特殊标记,结构不一致app/services/word_parser.pydocs/content-sqlite-design.md - SQLite 设计文档docs/sqlite-implementation-plan.md - 实施方案docs/text-editor-backend-api.md - API 文档EMPTY_LINE_STRUCTURE_FIX.md - 空行结构统一修复PYDANTIC_ALIAS_FIX.md - Pydantic 警告修复ALL_TYPES_SPARSE_SORTING.md - 稀疏排序实现NUMBERING_FORMAT_SUPPORT.md - 编号格式支持✅ 高性能 - SQLite Block 存储,快速查询和更新
✅ 完整的富文本 - JSON 数组存储格式信息
✅ 精确编辑 - 单个 Block 更新
✅ 清晰架构 - 分层设计,易于维护
✅ 完善测试 - 单元测试和集成测试
✅ 往返转换 - Word ↔ Block 完全可逆
项目准备就绪,可以开始使用! 🚀
维护者: 后端团队
更新日期: 2026-07-03
版本: 2.0.0