apply_sync_trigger.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. """
  2. 应用 039_sync_balance_to_user_consumption.sql 中的触发器定义。
  3. 运行:
  4. python backend/scripts/apply_sync_trigger.py
  5. 要求:
  6. - 已配置好数据库连接(复用 app.database.SessionLocal 的配置)。
  7. - 目标数据库为 Postgres,且 schema 为 aigcspace。
  8. """
  9. from pathlib import Path
  10. import sys
  11. # Ensure backend package is importable when running the script from workspace root
  12. project_root = Path(__file__).parent.parent
  13. sys.path.insert(0, str(project_root))
  14. from app.database import SessionLocal
  15. SQL_FILE = Path(__file__).parent.parent / "migrations" / "039_sync_balance_to_user_consumption.sql"
  16. def apply_sql():
  17. sql_text = SQL_FILE.read_text(encoding="utf-8")
  18. # 用 SessionLocal 里的 engine 执行原始 SQL
  19. engine = SessionLocal().bind
  20. # 使用底层 DB-API 原始连接直接执行整块 SQL(兼容包含 $$/函数体的脚本)
  21. raw_conn = engine.raw_connection()
  22. try:
  23. cur = raw_conn.cursor()
  24. cur.execute(sql_text)
  25. raw_conn.commit()
  26. cur.close()
  27. finally:
  28. raw_conn.close()
  29. def main():
  30. apply_sql()
  31. print("触发器脚本已执行:039_sync_balance_to_user_consumption.sql")
  32. if __name__ == "__main__":
  33. main()