Skip to content

Sherryyue24/NotionDBtoMD

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Notion 数据库导出工具 🚀

Python Version License Version

将 Notion 数据库导出为 Obsidian 兼容的 Markdown 文件的专业 Python 工具。

✨ 功能特点

🏗️ 核心功能

  • 完整数据库导出:支持将 Notion 数据库条目转换为 Obsidian Markdown 文件
  • 智能属性转换:自动处理 YAML frontmatter,包括日期时间格式的优化
  • 中文字段映射:智能转换中文属性名(特别是时间相关字段)为英文
  • 格式保留:保留 Notion 页面的原始格式和内容结构
  • 交互式界面:友好的命令行菜单系统,支持测试和完整导出模式

🛡️ 稳定性保障

  • 错误处理:完善的异常处理机制,精确定位问题
  • 重试机制:API请求失败自动重试,支持指数退避策略
  • 速率限制:自动处理Notion API的速率限制
  • 日志系统:完整的日志记录,便于问题排查和监控

📊 高级特性

  • 字段转换表:直观显示 Notion → Obsidian 属性类型映射关系
  • 空值属性处理:智能过滤空值字段,保持输出文件整洁
  • 转换预览:导出前展示字段转换情况,确认后再执行
  • 多种配置方式:支持配置文件和环境变量
  • 缓存机制:页面标题缓存,避免重复API调用
  • 导出统计:实时显示处理进度和结果统计
  • 模块化架构:重构后的专业架构,易于扩展和维护

🎯 支持的属性类型

  • 基础类型:title, rich_text, number, select, multi_select
  • 时间类型:date, created_time, last_edited_time
  • 用户类型:created_by, last_edited_by, people
  • 高级类型:formula, relation, rollup, files
  • 特殊类型:checkbox, url, email, phone_number

📝 支持的块类型

  • 基础块:paragraph, heading_1/2/3
  • 列表块:bulleted_list_item, numbered_list_item, to_do
  • 特殊块:code, quote, divider
  • 增强块:callout, toggle, embed, bookmark, image, file, video, audio, table

安装说明

  1. 克隆仓库:
git clone https://github.com/Sherryyue24/NotionDBtoMD.git
cd NotionDBtoMD
  1. 安装依赖:
pip install -r requirements.txt

配置步骤

  1. 创建 Notion 集成

    • 访问 Notion Developers
    • 点击 "New integration"
    • 填写集成名称并创建
    • 复制生成的 API 密钥
  2. 分享数据库给集成

    • 在 Notion 中打开要导出的数据库
    • 点击右上角的 "Share" 按钮
    • 在下拉菜单中找到并选择你创建的集成
  3. 获取数据库 ID

    • 在浏览器中打开数据库
    • 复制 URL 中的数据库 ID(32 位字符串)
  4. 配置程序

    • 复制 config.example.pyuser_config.py
      cp config.example.py user_config.py
    • 编辑 user_config.py 文件,填入您的实际配置:
      NOTION_API_KEY = "your-api-key"
      DATABASE_ID = "your-database-id"

    注意: 输出目录会自动设置为您的 Notion 数据库名称,无需手动指定。

使用方法

  1. 运行程序:
python main.py
  1. 您将看到交互式菜单:
============================================================
🚀 Notion 数据库导出工具
   将 Notion 数据库转换为 Obsidian Markdown 文件
============================================================

📋 请选择操作:
1. 🧪 测试转换(前5条记录)
2. 📦 转换全部记录
3. ⚙️  显示配置信息
4. 📊 显示支持的块类型
5. 🔄 显示字段转换表
6. 🚪 退出程序
  1. 选择操作模式:

    • 选项 1:测试转换前 5 条记录,验证配置和转换效果
    • 选项 2:转换全部数据库记录
    • 选项 3:查看当前配置信息
    • 选项 4:查看支持的Notion块类型
    • 选项 5:查看字段转换表,了解属性映射关系
    • 选项 6:退出程序
  2. 转换后的文件将自动保存在以数据库名称命名的目录中,包含完整的统计信息

🔄 字段转换表功能

智能转换预览

程序提供了强大的字段转换表功能,帮助您在导出前了解数据转换情况:

📊 转换表显示内容

字段名                Notion类型        Obsidian类型      状态        
--------------------------------------------------------------------------------
岗位类型               multi_select    List            ✅ 有值      
工作方式               select          Text            ✅ 有值      
评价                 rich_text       Text            ⚪ 空值      
URL                url             Text            ✅ 有值      
发布平台               relation        List            ⚪ 空值      
状态                 status          Text            ✅ 有值      
名称                 title           Text            ✅ 有值      

📈 转换统计信息

  • 转换前字段数: 数据库中定义的字段总数
  • 有值字段数: 包含实际数据的字段数量
  • 空值字段数: 为空的字段数量
  • 最终输出字段数: 实际输出到 markdown 的字段数量

🎯 使用场景

  1. 导出前确认: 在选项1或2进行导出时,自动显示字段转换预览
  2. 独立查看: 使用选项5单独查看字段转换表
  3. 调试分析: 了解哪些字段有数据,哪些为空

空值属性智能处理

  • 自动过滤: 空值字段不会出现在最终的 markdown 文件中
  • 保持整洁: 避免输出 null 或空值,保持文件干净
  • 结构完整: 保留所有有意义的属性,确保数据完整性

属性映射说明

时间相关字段自动转换

程序会自动将包含"时间"的中文属性名转换为英文,例如:

  • 上班时间 -> startwork_time
  • 下班时间 -> endwork_time
  • 开始时间 -> start_time
  • 结束时间 -> end_time
  • 创建时间 -> created_time 等

Notion 属性类型映射

Notion属性:https://www.notion.com/help/database-properties#types-of-database-properties Obsidian属性:https://help.obsidian.md/properties

完全支持 Notion 所有 21 种属性类型和Obsidian属性的转换:

详细映射表

Notion 属性类型 Obsidian 属性类型 输出格式 示例 说明
📝 文本相关
Title Text 纯文本 title: "我的笔记" 提取富文本的纯文本内容
Rich text Text 纯文本 description: "这是描述" 支持内部链接转换
URL Text 链接地址 website: "https://example.com" 保持原始URL格式
Email Text 邮箱地址 contact: "[email protected]" 保持邮箱格式
Phone Text 电话号码 phone: "+86 138 0000 0000" 保持电话格式
🔢 数值相关
Number Number 数值 score: 85 支持整数和小数
Formula Number/Text 计算结果 total: 100 根据公式结果类型决定
ID Text/Number 唯一标识符 id: "TASK-001" 支持前缀+数字格式
📅 日期相关
Date Date ISO日期格式 due: 2024-01-15 支持日期和日期时间
Created time Date 创建时间戳 created: 2024-01-15T10:30 自动生成
Last edited time Date 编辑时间戳 updated: 2024-01-15T15:45 自动更新
👥 人员相关
Person List 人员姓名列表 assignee: ["张三", "李四"] 支持多人员
Created by Text 创建者姓名 author: "张三" 单个用户名
Last edited by Text 编辑者姓名 editor: "李四" 单个用户名
🏷️ 选择相关
Select Text 选中标签 status: "进行中" 单个选项
Multi-select List 标签列表 tags: ["重要", "紧急"] 多个选项
Status Text 状态标签 workflow: "待办" 类似Select的状态管理
🔗 关联相关
Relation List 内部链接列表 related: ["[[笔记1]]", "[[笔记2]]"] 转换为Obsidian链接
Rollup Text 汇总结果 summary: "汇总信息" 显示汇总计算结果
📎 其他类型
Checkbox Checkbox 布尔值 completed: true 真/假值
Files & media List 文件名列表 attachments: ["文档.pdf", "图片.jpg"] 文件名称列表
Button Text 按钮标识 action: "Button" 按钮配置信息

转换优势

完全兼容: 所有 Notion 属性都能正确映射到 Obsidian 格式
类型保持: 数值、日期、布尔类型在转换后保持原有特性
链接转换: 关系属性自动转换为 Obsidian 内部链接
结构化: 使用标准 YAML frontmatter 格式,兼容其他工具

🔧 高级配置

环境变量配置

除了 config.py 文件,您也可以使用环境变量进行配置:

export NOTION_API_KEY="your-api-key"
export DATABASE_ID="your-database-id"
export OUTPUT_DIR="custom_output"
export LOG_LEVEL="DEBUG"

自定义字段映射

您可以在程序中自定义字段映射规则,将中文字段名映射为英文:

# 程序会自动映射以下字段
field_mapping = {
    "项目状态": "project_status",
    "负责人": "assignee",
    "优先级": "priority",
    "开始时间": "start_time",
    "结束时间": "end_time"
}

空值属性配置

控制空值字段的处理方式:

# 在配置中设置
config = Config(
    notion_api_key="your-api-key",
    database_id="your-database-id",
    include_empty_properties=False,  # 默认为False,过滤空值字段
    # include_empty_properties=True,  # 设为True则包含空值字段
)

配置选项说明

  • include_empty_properties=False (推荐): 空值字段不会出现在输出文件中,保持整洁
  • include_empty_properties=True: 包含所有字段,但空值字段会被智能过滤,不显示为null

日志记录

程序会自动生成详细的日志文件 notion_export.log,包含:

  • API请求记录
  • 错误信息和堆栈跟踪
  • 处理进度和统计信息
  • 性能监控数据

查看日志:

# 实时查看日志
tail -f notion_export.log

# 搜索错误信息
grep ERROR notion_export.log

📊 扩展功能

自定义块转换器

程序支持扩展新的Notion块类型转换器:

# 添加自定义块类型处理
def custom_block_converter(block):
    # 自定义转换逻辑
    return "转换后的markdown内容"

# 注册转换器
converter.register_converter("custom_block", custom_block_converter)

批量操作优化

  • 分页处理:自动处理大型数据库的分页获取
  • 并发控制:合理控制API请求频率,避免速率限制
  • 错误恢复:自动重试失败的请求,确保数据完整性

⚠️ 注意事项

  1. 权限检查:确保您有足够的 Notion API 访问权限
  2. 测试优先:建议先使用测试模式(选项 1)验证转换效果
  3. 时间预估:转换大量数据时可能需要较长时间,程序会显示进度
  4. 数据备份:建议定期备份 Obsidian 笔记
  5. 安全保护user_config.py 文件包含敏感信息,请勿上传到公共仓库
  6. 网络稳定:确保网络连接稳定,程序会自动处理网络中断和重试

🐛 故障排除

常见问题

Q: API密钥错误

❌ Notion API错误 (状态码: 401): API密钥无效或已过期
💡 建议检查API密钥是否正确

Q: 数据库ID错误

❌ Notion API错误 (状态码: 404): 资源未找到,请检查数据库ID
💡 建议检查数据库ID是否正确

Q: 网络超时

  • 程序会自动重试,请耐心等待
  • 可以查看日志文件了解详细情况
  • 如需调整超时设置,可修改配置参数

调试技巧

  1. 启用详细日志:设置环境变量 LOG_LEVEL=DEBUG
  2. 查看统计信息:使用菜单选项查看导出统计
  3. 检查日志文件:查看 notion_export.log 获取详细错误信息

📁 项目结构

notiondbtomd/
├── src/                          # 核心模块 (重构后的专业架构)
│   ├── __init__.py              # 包初始化,导出主要类
│   ├── exceptions.py            # 自定义异常类 (4种异常类型)
│   ├── config.py                # 配置管理类 (支持多种配置方式)
│   ├── property_converter.py    # 属性转换器 (支持21种属性类型)
│   ├── block_converter.py       # 块转换器 (支持15+种块类型)
│   └── notion_exporter.py       # 主导出器 (协调转换流程)
├── main.py                      # 主程序入口 (交互式菜单界面)
├── user_config.py               # 用户配置文件 (从config.example.py复制)
├── config.example.py            # 配置文件模板
├── requirements.txt             # Python依赖
├── LICENSE                      # MIT许可证
└── README.md                    # 使用说明

输出结构/
├── [数据库名称]/                # 自动创建的输出目录
│   ├── 页面1.md                # 转换后的Markdown文件
│   ├── 页面2.md                # 包含YAML frontmatter
│   └── ...                     # 所有导出的页面
└── notion_export.log           # 详细日志文件

🏗️ 重构亮点

  • 模块化设计: 每个功能独立为专门的类,职责清晰
  • 异常处理: 4种自定义异常类型,精确错误定位
  • 配置灵活: 支持文件配置、环境变量等多种方式
  • 可扩展性: 易于添加新的属性类型和块类型支持
  • 专业架构: 符合Python最佳实践的代码结构

🔗 相关项目

  • 🔌 Obsidian 插件版本: notion-obsidian-sync - 直接在 Obsidian 中使用,无需 Python 环境

📈 性能特性

  • 智能缓存:避免重复API调用,提高处理速度
  • 批量处理:支持大型数据库的高效导出
  • 内存优化:分页处理,适合处理大量数据
  • 网络优化:自动重试和速率限制处理

📜 许可证

MIT License - 详见 LICENSE 文件

💡 支持

如果这个项目对您有帮助,请考虑:

  • ⭐ 给项目加星
  • 🔄 分享给其他用户
  • 💬 在社区中分享使用体验
  • 🐛 报告问题和建议改进

🚀 开始使用这个简单的Notion数据库导出工具,轻松将您的数据迁移到本地MD文件!

开始使用 | 查看字段转换表 | 报告问题 | 功能建议

About

covert notion database to local md files

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages