Files

78 lines
2.5 KiB
Python
Raw Permalink Normal View History

"""
一次性脚本:将 AI 生成的内容摘要卡写入 episodes 表的 content_digest 字段
数据来源:ai-labeling/experiments/content_digests/_all_digests.json
前置:先手动执行 backend/sql/004_add_content_digest.sql 添加字段
"""
import sys
import os
import json
from datetime import date
# Windows 终端中文输出
sys.stdout.reconfigure(encoding='utf-8')
sys.stderr.reconfigure(encoding='utf-8')
# 加 backend 到 path
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'backend'))
from app.db.session import get_session
from app.models.episode import Episode
from app.models.user import User # FK 解析需要
from sqlmodel import select
# ── 1. 读 digest 数据 ──
project_root = os.path.join(os.path.dirname(__file__), '..')
digest_file = os.path.join(project_root, 'ai-labeling', 'experiments', 'content_digests', '_all_digests.json')
with open(digest_file, 'r', encoding='utf-8') as f:
all_digests = json.load(f)
print(f"读入 {len(all_digests)} 条摘要记录")
# ── 2. 逐条匹配并写入 ──
session = next(get_session())
success = 0
skipped = 0
mismatch = 0
for d in all_digests:
ep_num = d['ep']
digest_date = d['date'] # "2026-04-21" 格式
# 查 episode
ep = session.exec(select(Episode).where(Episode.episode_number == ep_num)).first()
if not ep:
print(f"⚠️ ep{ep_num:02d} 在数据库中不存在,跳过")
skipped += 1
continue
# 校验日期
if str(ep.air_date) != digest_date:
print(f"⚠️ ep{ep_num:02d} 日期不匹配: DB={ep.air_date}, digest={digest_date},跳过")
mismatch += 1
continue
# 写入(只存 digest 字段,不存外壳的 ep/date/title/editor/filename/generated_at
ep.content_digest = d['digest']
session.add(ep)
success += 1
print(f"✅ ep{ep_num:02d} {ep.program_name} <- digest 已写入")
session.commit()
# ── 3. 打印统计 ──
print()
print(f"=== 统计 ===")
print(f"成功写入: {success}")
print(f"跳过(不存在): {skipped}")
print(f"跳过(日期不匹配): {mismatch}")
print(f"总记录: {len(all_digests)}")
# ── 4. 验证:所有 episodes 的 content_digest 状态 ──
print()
print(f"=== 验证: episodes content_digest 状态 ===")
all_eps = session.exec(select(Episode).order_by(Episode.episode_number)).all()
for e in all_eps:
has_digest = "✅" if e.content_digest is not None else "❌"
print(f"ep{e.episode_number:02d} | {e.program_name} | {e.air_date} | digest: {has_digest}")