#!/usr/bin/env python3 """ 数据库初始化脚本 创建数据库表并插入初始数据 """ import sys from pathlib import Path # 添加backend目录到Python路径 backend_dir = Path(__file__).parent if str(backend_dir) not in sys.path: sys.path.insert(0, str(backend_dir)) from ..core.database import init_database, get_database_url from ..core.config import init_paths, get_data_directory from ..models.base import Base from ..models.project import Project, ProjectStatus, ProjectType from ..models.clip import Clip from ..models.collection import Collection from ..models.task import Task, TaskStatus, TaskType from sqlalchemy.orm import Session from ..core.database import SessionLocal def create_initial_data(): """创建初始测试数据""" db = SessionLocal() try: # 检查是否已有数据 existing_projects = db.query(Project).count() if existing_projects > 0: print("数据库中已有数据,跳过初始数据创建") return # 创建测试项目 test_project = Project( name="测试项目", description="这是一个测试项目,用于验证系统功能", project_type=ProjectType.KNOWLEDGE, status=ProjectStatus.PENDING, processing_config={ "chunk_size": 5000, "min_score_threshold": 0.7, "max_clips_per_collection": 5 } ) db.add(test_project) db.commit() db.refresh(test_project) # 创建测试任务 test_task = Task( name="测试任务", description="测试处理任务", task_type=TaskType.VIDEO_PROCESSING, project_id=test_project.id, status=TaskStatus.PENDING, progress=0, current_step="等待开始", total_steps=6 ) db.add(test_task) # 创建测试切片 test_clip = Clip( title="测试切片", content="这是一个测试切片的内容", start_time=0, end_time=30, score=0.8, project_id=test_project.id ) db.add(test_clip) # 创建测试合集 test_collection = Collection( title="测试合集", description="这是一个测试合集", project_id=test_project.id ) db.add(test_collection) db.commit() print("✅ 初始测试数据创建成功") except Exception as e: print(f"❌ 创建初始数据失败: {e}") db.rollback() finally: db.close() def main(): """主函数""" print("🚀 开始初始化数据库...") # 初始化路径配置 init_paths() # 显示数据库配置 print(f"数据库URL: {get_database_url()}") print(f"数据目录: {get_data_directory()}") # 初始化数据库 if init_database(): print("✅ 数据库初始化成功") # 创建初始数据 create_initial_data() print("🎉 数据库初始化完成!") else: print("❌ 数据库初始化失败") sys.exit(1) if __name__ == "__main__": main()