#!/usr/bin/env python3 """ BGM 种子数据导入脚本 ================== 用于部署环境初始化 BGM 数据。读取同目录下的 bgm_seed_data.json, 将 129 首系统背景音乐的元数据(含七牛云 URL)写入数据库。 执行方式(在 API 容器内): python scripts/seed_bgm.py 环境变量依赖: DATABASE_URL — 同应用配置,容器启动时已注入 """ import asyncio import json import os import sys from pathlib import Path project_root = Path(__file__).parent.parent sys.path.insert(0, str(project_root)) from dotenv import load_dotenv load_dotenv() from sqlalchemy import select, func from app.db.session import AsyncSessionLocal from app.models.bgm_music import BgmMusic SEED_FILE = Path(__file__).parent / "bgm_seed_data.json" async def seed_bgm(): if not SEED_FILE.exists(): print(f"错误: 种子数据文件不存在: {SEED_FILE}") return with open(SEED_FILE, "r", encoding="utf-8") as f: data = json.load(f) async with AsyncSessionLocal() as session: # 检查是否已有数据 count = await session.scalar(select(func.count(BgmMusic.id))) if count and count > 0: print(f"数据库中已有 {count} 条 BGM 记录,跳过导入") print("如需强制重新导入,请先清空 mjk_bgm_musics 表") return for idx, item in enumerate(data): bgm = BgmMusic( title=item["title"], artist=item.get("artist"), category=item["category"], file_path=item["file_path"], url=item["url"], duration=item.get("duration"), status=item.get("status", "active"), sort_order=item.get("sort_order", idx), ) session.add(bgm) await session.commit() print(f"种子数据导入完成,共 {len(data)} 首") if __name__ == "__main__": asyncio.run(seed_bgm())