| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- #!/usr/bin/env python3
- """
- 仅执行 043_create_parsed_pricing_tables.sql
- 用法:
- python run_043_parsed_pricing_migration.py
- python run_043_parsed_pricing_migration.py --schema aigcspace
- """
- import sys
- from pathlib import Path
- from sqlalchemy import create_engine, text
- from sqlalchemy.exc import SQLAlchemyError
- from dotenv import load_dotenv
- # 确保可导入项目模块
- PROJECT_ROOT = Path(__file__).resolve().parents[1]
- if str(PROJECT_ROOT) not in sys.path:
- sys.path.insert(0, str(PROJECT_ROOT))
- from app.database import DATABASE_URL
- def load_env() -> None:
- env_path = PROJECT_ROOT / ".env"
- load_dotenv(dotenv_path=env_path)
- def main() -> None:
- import argparse
- load_env()
- parser = argparse.ArgumentParser(description="执行 043_create_parsed_pricing_tables.sql")
- parser.add_argument("--schema", default="aigcspace", help="schema 名称")
- args = parser.parse_args()
- migration_path = PROJECT_ROOT / "migrations" / "043_create_parsed_pricing_tables.sql"
- if not migration_path.exists():
- raise SystemExit(f"未找到迁移文件: {migration_path}")
- sql = migration_path.read_text(encoding="utf-8")
- if not sql.strip():
- print("迁移文件为空,跳过。")
- return
- engine = create_engine(DATABASE_URL)
- try:
- with engine.begin() as conn:
- conn.execute(text(f"CREATE SCHEMA IF NOT EXISTS {args.schema}"))
- conn.execute(text(sql))
- print("迁移执行完成。")
- except SQLAlchemyError as exc:
- print(f"迁移执行失败: {exc}")
- raise SystemExit(1)
- if __name__ == "__main__":
- main()
|