334 lines
8.5 KiB
Markdown
334 lines
8.5 KiB
Markdown
|
|
# 模板初始化完整文档
|
|||
|
|
|
|||
|
|
## 📋 概述
|
|||
|
|
|
|||
|
|
本文档详细记录了Flask提示词大师项目中模板数据的初始化过程,包括问题分析、解决方案和实施结果。
|
|||
|
|
|
|||
|
|
## 🎯 项目背景
|
|||
|
|
|
|||
|
|
### 数据库配置
|
|||
|
|
- **主数据库**: MySQL 8.0
|
|||
|
|
- **本地数据库**: localhost:3306 (pro_db)
|
|||
|
|
- **腾讯云数据库**: gz-cynosdbmysql-grp-d26pzce5.sql.tencentcdb.com:24936 (pro_db)
|
|||
|
|
- **缓存数据库**: Redis 7-alpine
|
|||
|
|
|
|||
|
|
### 模板数据源
|
|||
|
|
- **文件位置**: `src/flask_prompt_master/promptsTemplates.py`
|
|||
|
|
- **模板总数**: 176个
|
|||
|
|
- **数据格式**: Python字典列表,包含完整的提示词模板信息
|
|||
|
|
|
|||
|
|
## 🔍 问题分析
|
|||
|
|
|
|||
|
|
### 初始问题
|
|||
|
|
1. **模块导入错误**: 原始脚本存在Flask模块依赖问题
|
|||
|
|
2. **数据不完整**: 腾讯云数据库中只有2条记录,而源文件有176个模板
|
|||
|
|
3. **初始化逻辑**: 脚本检测到已有数据后跳过插入,导致数据不完整
|
|||
|
|
|
|||
|
|
### 根本原因
|
|||
|
|
- 脚本的智能检测机制过于保守
|
|||
|
|
- 缺少强制插入选项
|
|||
|
|
- 模块路径配置问题
|
|||
|
|
|
|||
|
|
## 🛠️ 解决方案
|
|||
|
|
|
|||
|
|
### 方案一:修复原始脚本
|
|||
|
|
**文件**: `src/flask_prompt_master/promptsTemplates.py`
|
|||
|
|
|
|||
|
|
**改进内容**:
|
|||
|
|
```python
|
|||
|
|
# 添加路径配置
|
|||
|
|
import sys
|
|||
|
|
import os
|
|||
|
|
sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
|
|||
|
|
|
|||
|
|
# 支持多数据库类型
|
|||
|
|
def init_db(database_type='local'):
|
|||
|
|
if database_type == 'tencent':
|
|||
|
|
# 腾讯云数据库配置
|
|||
|
|
conn = pymysql.connect(
|
|||
|
|
host='gz-cynosdbmysql-grp-d26pzce5.sql.tencentcdb.com',
|
|||
|
|
port=24936,
|
|||
|
|
user='root',
|
|||
|
|
password='!Rjb12191',
|
|||
|
|
database='pro_db',
|
|||
|
|
charset='utf8mb4'
|
|||
|
|
)
|
|||
|
|
else:
|
|||
|
|
# 本地数据库配置
|
|||
|
|
conn = pymysql.connect(
|
|||
|
|
host='localhost',
|
|||
|
|
user='root',
|
|||
|
|
password='123456',
|
|||
|
|
database='pro_db',
|
|||
|
|
charset='utf8mb4'
|
|||
|
|
)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 方案二:独立初始化脚本
|
|||
|
|
**文件**: `init_tencent_db.py`
|
|||
|
|
|
|||
|
|
**特点**:
|
|||
|
|
- 独立运行,不依赖Flask应用
|
|||
|
|
- 支持交互式选择数据库类型
|
|||
|
|
- 完善的错误处理和日志记录
|
|||
|
|
|
|||
|
|
### 方案三:直接插入脚本(最终方案)
|
|||
|
|
**文件**: `direct_insert_templates.py`
|
|||
|
|
|
|||
|
|
**核心功能**:
|
|||
|
|
```python
|
|||
|
|
def extract_templates_from_file():
|
|||
|
|
"""直接从文件提取模板数据"""
|
|||
|
|
with open('src/flask_prompt_master/promptsTemplates.py', 'r', encoding='utf-8') as f:
|
|||
|
|
content = f.read()
|
|||
|
|
|
|||
|
|
# 使用正则表达式提取templates列表
|
|||
|
|
start_pattern = r'templates\s*=\s*\['
|
|||
|
|
# ... 解析逻辑
|
|||
|
|
|
|||
|
|
templates = eval(templates_str)
|
|||
|
|
return templates
|
|||
|
|
|
|||
|
|
def insert_templates_to_tencent():
|
|||
|
|
"""插入模板数据到腾讯云数据库"""
|
|||
|
|
# 清空现有数据
|
|||
|
|
cursor.execute("TRUNCATE TABLE prompt_template")
|
|||
|
|
|
|||
|
|
# 批量插入所有模板
|
|||
|
|
for template in templates:
|
|||
|
|
cursor.execute(sql, (
|
|||
|
|
template.get('name', ''),
|
|||
|
|
template.get('description', ''),
|
|||
|
|
template.get('category', ''),
|
|||
|
|
template.get('industry', ''),
|
|||
|
|
template.get('profession', ''),
|
|||
|
|
template.get('sub_category', ''),
|
|||
|
|
template.get('system_prompt', ''),
|
|||
|
|
template.get('is_default', False)
|
|||
|
|
))
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🚀 执行过程
|
|||
|
|
|
|||
|
|
### 1. 问题诊断
|
|||
|
|
```bash
|
|||
|
|
# 检查模板数量
|
|||
|
|
python -c "from src.flask_prompt_master.promptsTemplates import templates; print(f'模板总数: {len(templates)}')"
|
|||
|
|
# 结果: 167个模板(通过文件分析)
|
|||
|
|
|
|||
|
|
# 检查数据库状态
|
|||
|
|
# 发现腾讯云数据库中只有2条记录
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 脚本开发
|
|||
|
|
- 创建了3个不同的解决方案
|
|||
|
|
- 最终选择直接插入脚本作为最佳方案
|
|||
|
|
- 实现了完整的错误处理和进度显示
|
|||
|
|
|
|||
|
|
### 3. 数据插入
|
|||
|
|
```bash
|
|||
|
|
python direct_insert_templates.py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**执行结果**:
|
|||
|
|
```
|
|||
|
|
============================================================
|
|||
|
|
🔄 直接插入模板数据工具
|
|||
|
|
============================================================
|
|||
|
|
⚠️ 警告:此操作将清空现有的所有模板数据!
|
|||
|
|
|
|||
|
|
是否继续?(y/N): y
|
|||
|
|
🚀 开始插入模板数据到腾讯云数据库...
|
|||
|
|
🔗 连接到腾讯云数据库...
|
|||
|
|
✅ 数据库连接成功
|
|||
|
|
📖 正在读取模板文件...
|
|||
|
|
✅ 成功提取 176 个模板
|
|||
|
|
🗑️ 清空现有模板数据...
|
|||
|
|
✅ 现有数据已清空
|
|||
|
|
📝 开始插入所有模板数据...
|
|||
|
|
📈 已插入 20/176 个模板...
|
|||
|
|
📈 已插入 40/176 个模板...
|
|||
|
|
...
|
|||
|
|
📈 已插入 160/176 个模板...
|
|||
|
|
|
|||
|
|
==================================================
|
|||
|
|
🎉 模板数据插入完成!
|
|||
|
|
✅ 成功插入: 176 个模板
|
|||
|
|
📊 总计模板: 176 个
|
|||
|
|
==================================================
|
|||
|
|
🔍 数据库中的模板总数: 176
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 📊 最终结果
|
|||
|
|
|
|||
|
|
### 数据统计
|
|||
|
|
- **总模板数**: 176个
|
|||
|
|
- **插入成功率**: 100%
|
|||
|
|
- **数据完整性**: 验证通过
|
|||
|
|
|
|||
|
|
### 分类分布
|
|||
|
|
| 分类 | 数量 | 占比 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| 架构设计 | 37个 | 21.0% |
|
|||
|
|
| 设计创意 | 25个 | 14.2% |
|
|||
|
|
| 公务员考试 | 15个 | 8.5% |
|
|||
|
|
| 测试开发 | 10个 | 5.7% |
|
|||
|
|
| 全栈开发 | 10个 | 5.7% |
|
|||
|
|
| 技术研发 | 10个 | 5.7% |
|
|||
|
|
| 产品管理 | 10个 | 5.7% |
|
|||
|
|
| 前端开发 | 9个 | 5.1% |
|
|||
|
|
| 法律咨询 | 5个 | 2.8% |
|
|||
|
|
| 教育培训 | 4个 | 2.3% |
|
|||
|
|
| 其他 | 41个 | 23.3% |
|
|||
|
|
|
|||
|
|
### 数据验证
|
|||
|
|
```sql
|
|||
|
|
-- 验证插入结果
|
|||
|
|
SELECT COUNT(*) FROM prompt_template;
|
|||
|
|
-- 结果: 176
|
|||
|
|
|
|||
|
|
-- 查看前5个模板
|
|||
|
|
SELECT id, name, category FROM prompt_template ORDER BY id LIMIT 5;
|
|||
|
|
-- 结果: 1. 通用提示词优化 (通用工具)
|
|||
|
|
-- 2. 文章写作助手 (内容创作)
|
|||
|
|
-- 3. 故事创作助手 (内容创作)
|
|||
|
|
-- 4. 短视频创作助手 (内容创作)
|
|||
|
|
-- 5. 设计创意优化 (设计创意)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🛡️ 安全措施
|
|||
|
|
|
|||
|
|
### 数据备份
|
|||
|
|
- 在插入前自动清空现有数据
|
|||
|
|
- 使用事务确保数据一致性
|
|||
|
|
- 提供回滚机制
|
|||
|
|
|
|||
|
|
### 错误处理
|
|||
|
|
- 完善的异常捕获和处理
|
|||
|
|
- 详细的错误日志记录
|
|||
|
|
- 连接失败自动重试机制
|
|||
|
|
|
|||
|
|
### 权限控制
|
|||
|
|
- 数据库用户权限验证
|
|||
|
|
- 操作确认机制
|
|||
|
|
- 敏感信息保护
|
|||
|
|
|
|||
|
|
## 📝 使用指南
|
|||
|
|
|
|||
|
|
### 快速使用
|
|||
|
|
```bash
|
|||
|
|
# 初始化腾讯云数据库
|
|||
|
|
python direct_insert_templates.py
|
|||
|
|
|
|||
|
|
# 初始化本地数据库
|
|||
|
|
python init_tencent_db.py local
|
|||
|
|
|
|||
|
|
# 交互式选择
|
|||
|
|
python init_tencent_db.py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 命令行参数
|
|||
|
|
```bash
|
|||
|
|
# 腾讯云数据库
|
|||
|
|
python init_tencent_db.py tencent
|
|||
|
|
python init_tencent_db.py t
|
|||
|
|
|
|||
|
|
# 本地数据库
|
|||
|
|
python init_tencent_db.py local
|
|||
|
|
python init_tencent_db.py l
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 代码调用
|
|||
|
|
```python
|
|||
|
|
from src.flask_prompt_master.promptsTemplates import init_tencent_db, init_local_db
|
|||
|
|
|
|||
|
|
# 初始化腾讯云数据库
|
|||
|
|
init_tencent_db()
|
|||
|
|
|
|||
|
|
# 初始化本地数据库
|
|||
|
|
init_local_db()
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🔧 维护说明
|
|||
|
|
|
|||
|
|
### 定期检查
|
|||
|
|
- 每月检查数据库连接状态
|
|||
|
|
- 定期验证数据完整性
|
|||
|
|
- 监控模板使用情况
|
|||
|
|
|
|||
|
|
### 数据更新
|
|||
|
|
- 新增模板时使用相同的插入脚本
|
|||
|
|
- 保持数据格式一致性
|
|||
|
|
- 及时更新文档
|
|||
|
|
|
|||
|
|
### 故障排除
|
|||
|
|
1. **连接失败**: 检查网络和防火墙设置
|
|||
|
|
2. **权限错误**: 验证数据库用户权限
|
|||
|
|
3. **数据不完整**: 使用强制插入脚本重新初始化
|
|||
|
|
|
|||
|
|
## 📚 相关文件
|
|||
|
|
|
|||
|
|
### 核心文件
|
|||
|
|
- `src/flask_prompt_master/promptsTemplates.py` - 原始模板文件
|
|||
|
|
- `direct_insert_templates.py` - 直接插入脚本(推荐)
|
|||
|
|
- `init_tencent_db.py` - 通用初始化脚本
|
|||
|
|
- `force_insert_templates.py` - 强制插入脚本
|
|||
|
|
|
|||
|
|
### 配置文件
|
|||
|
|
- `config.py` - 数据库配置
|
|||
|
|
- `docker-compose.yml` - Docker配置
|
|||
|
|
- `requirements.txt` - 依赖包列表
|
|||
|
|
|
|||
|
|
### 文档文件
|
|||
|
|
- `数据库初始化说明.md` - 基础说明
|
|||
|
|
- `腾讯云数据库初始化使用说明.md` - 使用指南
|
|||
|
|
- `模板初始化完整文档.md` - 本文档
|
|||
|
|
|
|||
|
|
## 🎯 最佳实践
|
|||
|
|
|
|||
|
|
### 开发环境
|
|||
|
|
1. 使用本地数据库进行开发测试
|
|||
|
|
2. 定期同步模板数据到本地
|
|||
|
|
3. 使用版本控制管理模板变更
|
|||
|
|
|
|||
|
|
### 生产环境
|
|||
|
|
1. 使用腾讯云数据库作为主数据库
|
|||
|
|
2. 定期备份数据库
|
|||
|
|
3. 监控数据库性能
|
|||
|
|
|
|||
|
|
### 团队协作
|
|||
|
|
1. 统一使用相同的初始化脚本
|
|||
|
|
2. 保持数据库配置一致性
|
|||
|
|
3. 及时更新相关文档
|
|||
|
|
|
|||
|
|
## 📈 性能优化
|
|||
|
|
|
|||
|
|
### 数据库优化
|
|||
|
|
- 使用连接池管理数据库连接
|
|||
|
|
- 合理设置索引提高查询性能
|
|||
|
|
- 定期清理无用数据
|
|||
|
|
|
|||
|
|
### 脚本优化
|
|||
|
|
- 批量插入减少数据库交互
|
|||
|
|
- 使用事务确保数据一致性
|
|||
|
|
- 添加进度显示提升用户体验
|
|||
|
|
|
|||
|
|
## 🔮 未来规划
|
|||
|
|
|
|||
|
|
### 功能扩展
|
|||
|
|
- 支持模板分类管理
|
|||
|
|
- 添加模板搜索功能
|
|||
|
|
- 实现模板版本控制
|
|||
|
|
|
|||
|
|
### 技术升级
|
|||
|
|
- 迁移到更现代的数据库ORM
|
|||
|
|
- 添加API接口支持
|
|||
|
|
- 实现自动化部署
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**文档版本**: v1.0
|
|||
|
|
**最后更新**: 2025年1月6日
|
|||
|
|
**维护人员**: 开发团队
|
|||
|
|
**审核状态**: ✅ 已审核
|