#!/usr/bin/env python3 """执行 com-sxsy80-data-cleanup.sql。 需安装: pip install pymysql 连接信息见 docs/com-sxsy80-data-imgration.md,通过环境变量传入,避免把密码写进仓库: export YTYP_DB_HOST=106.14.132.80 export YTYP_DB_USER=yangtangyoupin export YTYP_DB_PASSWORD='...' export YTYP_DB_NAME=yangtangyoupin python3 docs/sql/run_com_sxsy80_cleanup.py """ from __future__ import annotations import os import pathlib import sys import pymysql ROOT = pathlib.Path(__file__).resolve().parents[2] SQL_FILE = ROOT / "docs" / "sql" / "com-sxsy80-data-cleanup.sql" def load_statements(path: pathlib.Path) -> list[str]: text = path.read_text(encoding="utf-8") stmts: list[str] = [] buf: list[str] = [] for line in text.splitlines(): s = line.strip() if s.startswith("--") or not line.strip(): continue buf.append(line) if ";" in line: chunk = "\n".join(buf).strip() if chunk: stmts.append(chunk) buf = [] if buf: chunk = "\n".join(buf).strip() if chunk: stmts.append(chunk) return stmts def main() -> int: host = os.environ.get("YTYP_DB_HOST", "106.14.132.80") user = os.environ.get("YTYP_DB_USER", "yangtangyoupin") password = os.environ.get("YTYP_DB_PASSWORD") database = os.environ.get("YTYP_DB_NAME", "yangtangyoupin") if not password: print("请设置环境变量 YTYP_DB_PASSWORD(见脚本头部说明)", file=sys.stderr) return 1 if not SQL_FILE.is_file(): print("missing", SQL_FILE, file=sys.stderr) return 1 statements = load_statements(SQL_FILE) conn = pymysql.connect( host=host, user=user, password=password, database=database, charset="utf8mb4", autocommit=False, ) try: with conn.cursor() as cur: for i, sql in enumerate(statements, 1): cur.execute(sql) head = sql.split()[0].upper() if head == "DELETE" and cur.rowcount >= 0: print(f"[{i}] DELETE … rowcount={cur.rowcount}") else: print(f"[{i}] ok") conn.commit() print("COMMIT ok") except Exception as e: conn.rollback() print("ROLLBACK:", e, file=sys.stderr) raise finally: conn.close() return 0 if __name__ == "__main__": raise SystemExit(main())