"""执行一个 SQL 文件(UTF-8,按分号切分)。 用法:python scripts/setup/apply_sql_file.py 用途:把 docs/项目框架设计/表设计/ 下的建表 SQL 灌进 jinrong_agent(避免命令行中文路径/编码问题)。 """ import sys import pathlib import pymysql def load_env(path=".env"): env = {} p = pathlib.Path(path) if p.exists(): for line in p.read_text(encoding="utf-8").splitlines(): line = line.strip() if not line or line.startswith("#") or "=" not in line: continue k, v = line.split("=", 1) env[k.strip()] = v.strip() return env def main() -> None: if len(sys.argv) < 2: print("用法:python scripts/setup/apply_sql_file.py ") sys.exit(2) sql_file = sys.argv[1] env = load_env() conn = pymysql.connect( host=env.get("MYSQL_HOST", "127.0.0.1"), port=int(env.get("MYSQL_PORT", "3306")), user=env.get("MYSQL_USER", "root"), password=env.get("MYSQL_PASSWORD", ""), charset="utf8mb4", autocommit=True, ) raw = pathlib.Path(sql_file).read_text(encoding="utf-8") # 去掉 -- 注释行后按分号切分 text = "\n".join(l for l in raw.splitlines() if not l.strip().startswith("--")) stmts = [s.strip() for s in text.split(";") if s.strip()] with conn.cursor() as cur: for s in stmts: cur.execute(s) conn.close() print(f"OK: 执行了 {len(stmts)} 条语句 <- {sql_file}") if __name__ == "__main__": main()