Files
cutThenThink/docs/database_usage.md
congsh c4a77f8aa4 feat: 实现CutThenThink P0阶段核心功能
项目初始化
- 创建完整项目结构(src/, data/, docs/, examples/, tests/)
- 配置requirements.txt依赖
- 创建.gitignore

P0基础框架
- 数据库模型:Record模型,6种分类类型
- 配置管理:YAML配置,支持AI/OCR/云存储/UI配置
- OCR模块:PaddleOCR本地识别,支持云端扩展
- AI模块:支持OpenAI/Claude/通义/Ollama,6种分类
- 存储模块:完整CRUD,搜索,统计,导入导出
- 主窗口框架:侧边栏导航,米白配色方案
- 图片处理:截图/剪贴板/文件选择/图片预览
- 处理流程整合:OCR→AI→存储串联,Markdown展示,剪贴板复制
- 分类浏览:卡片网格展示,分类筛选,搜索,详情查看

技术栈
- PyQt6 + SQLAlchemy + PaddleOCR + OpenAI/Claude SDK
- 共47个Python文件,4000+行代码

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 18:21:31 +08:00

3.6 KiB
Raw Permalink Blame History

数据库模型使用说明

概述

数据库模型位于 src/models/database.py,使用 SQLAlchemy ORM 实现。

主要组件

1. Record 模型

数据库表结构,包含以下字段:

字段名 类型 说明
id Integer 主键,自增
image_path String(512) 图片路径,唯一索引
ocr_text Text OCR识别结果
category String(20) 分类类型
ai_result Text AI生成的Markdown
tags JSON 标签列表
notes Text 用户备注
created_at DateTime 创建时间
updated_at DateTime 更新时间

2. RecordCategory 类

定义了支持的分类常量:

RecordCategory.TODO   # 待办事项
RecordCategory.NOTE   # 笔记
RecordCategory.IDEA   # 灵感
RecordCategory.REF    # 参考资料
RecordCategory.FUNNY  # 搞笑文案
RecordCategory.TEXT   # 纯文本

3. DatabaseManager 类

数据库连接管理器,负责:

  • 创建数据库引擎
  • 管理会话工厂
  • 初始化表结构

4. 便捷函数

  • init_database(db_path): 初始化数据库
  • get_db(): 获取数据库会话

使用示例

初始化数据库

from src.models import init_database

# 使用默认路径
db_manager = init_database()

# 指定自定义路径
db_manager = init_database("sqlite:////path/to/database.db")

创建记录

from src.models import get_db, Record, RecordCategory

session = get_db()

# 创建新记录
record = Record(
    image_path="/path/to/image.png",
    ocr_text="识别的文本",
    category=RecordCategory.NOTE,
    ai_result="# AI内容",
    tags=["标签1", "标签2"],
    notes="用户备注"
)

session.add(record)
session.commit()
print(f"新记录ID: {record.id}")
session.close()

查询记录

from src.models import get_db, Record, RecordCategory

session = get_db()

# 查询所有记录
all_records = session.query(Record).all()

# 按分类查询
notes = session.query(Record).filter_by(category=RecordCategory.NOTE).all()

# 按ID查询
record = session.query(Record).filter_by(id=1).first()

# 模糊搜索
results = session.query(Record).filter(
    Record.ocr_text.contains("关键词")
).all()

session.close()

更新记录

from src.models import get_db, Record

session = get_db()
record = session.query(Record).filter_by(id=1).first()

# 更新字段
record.notes = "新的备注"
record.ai_result = "# 更新后的AI内容"

# 使用标签方法
record.add_tag("新标签")
record.update_tags(["标签A", "标签B"])

session.commit()
session.close()

删除记录

from src.models import get_db, Record

session = get_db()
record = session.query(Record).filter_by(id=1).first()

session.delete(record)
session.commit()
session.close()

转换为字典

from src.models import get_db, Record

session = get_db()
record = session.query(Record).first()

# 转换为字典格式
data = record.to_dict()
print(data)
# {'id': 1, 'image_path': '/path/to/image.png', ...}

session.close()

注意事项

  1. 会话管理: 使用完session后记得关闭或使用上下文管理器
  2. 时间戳: created_atupdated_at 自动管理
  3. 分类验证: 使用 RecordCategory.is_valid(category) 验证分类
  4. JSON字段: tags 字段是JSON类型存储为列表

数据库文件位置

默认数据库文件路径:

/home/congsh/CodeSpace/ClaudeSpace/CutThenThink/data/cutnthink.db

测试

运行测试脚本验证数据库功能需要先安装SQLAlchemy

python3 tests/test_database.py