""" 第二轮归档:迁移脚本 + 过时的变更记录文档。 保留:seeds、fdw、create_test_db、数据字典类 BD_Manual。 用法:cd C:\\NeoZQYY && python scripts/ops/_archive_phase2.py """ import shutil from pathlib import Path from datetime import date ROOT = Path(__file__).resolve().parent.parent.parent ARCHIVE_BASE = ROOT / "db" / "_archived" / f"ddl_baseline_{date.today().isoformat()}" # ── 1. db/ 下的迁移脚本 ────────────────────────────────────────────────── MIGRATION_FILES = [] for d in ["db/etl_feiqiu/migrations", "db/zqyy_app/migrations"]: p = ROOT / d if p.exists(): for f in sorted(p.glob("*.sql")): MIGRATION_FILES.append(str(f.relative_to(ROOT))) # 一次性数据迁移脚本 MIGRATION_FILES.append("db/scripts/migrate_test_data.sql") # ── 2. docs/database/ 下的迁移变更记录(非数据字典) ───────────────────── # 迁移变更记录:记录某次 ALTER/DROP/CREATE 操作的 BD_Manual MIGRATION_DOCS = [ "docs/database/BD_Manual_dim_member_add_birthday.md", # C1 加列 "docs/database/BD_Manual_drop_assistant_abolish_tables.md", # 删表 "docs/database/BD_Manual_dws_assistant_monthly_uk_change.md", # 改约束 "docs/database/BD_Manual_dws_assistant_salary_uk_change.md", # 改约束 "docs/database/BD_Manual_fix_bc_sentinel_dates.md", # 修数据 "docs/database/BD_Manual_fdw_reverse_member_birthday.md", # FDW 变更 "docs/database/BD_Manual_member_birthday_manual.md", # 新建表 "docs/database/etl_feiqiu_schema_migration.md", # 迁移汇总 "docs/database/zqyy_app_admin_web_tables.md", # 新建表 ] # docs 归档到 docs/database/_archived/ DOCS_ARCHIVE = ROOT / "docs" / "database" / "_archived" def move_file(src_rel, dest_base): """移动文件,保留相对路径结构。""" src = ROOT / src_rel if not src.exists(): return None dest = dest_base / src_rel dest.parent.mkdir(parents=True, exist_ok=True) shutil.move(str(src), str(dest)) return src_rel def main(): moved_db = [] moved_docs = [] # 归档迁移 SQL print("── 归档迁移脚本 → db/_archived/ ──") for rel in MIGRATION_FILES: result = move_file(rel, ARCHIVE_BASE) if result: moved_db.append(result) print(f" ✅ {result}") # 归档迁移变更文档 print("\n── 归档迁移变更文档 → docs/database/_archived/ ──") for rel in MIGRATION_DOCS: src = ROOT / rel if not src.exists(): continue dest = DOCS_ARCHIVE / src.name DOCS_ARCHIVE.mkdir(parents=True, exist_ok=True) shutil.move(str(src), str(dest)) moved_docs.append(rel) print(f" ✅ {src.name}") # 补充 .gitkeep for d in ["db/etl_feiqiu/migrations", "db/zqyy_app/migrations", "db/scripts"]: gk = ROOT / d / ".gitkeep" dp = ROOT / d if dp.exists() and not gk.exists(): # 检查目录是否只剩 .gitkeep 或为空 remaining = [f for f in dp.iterdir() if f.name != ".gitkeep"] if not remaining: gk.touch() print(f" 📄 补充 {d}/.gitkeep") print(f"\n✅ 完成:归档 {len(moved_db)} 个迁移 SQL + {len(moved_docs)} 个变更文档") if __name__ == "__main__": main()