import asyncio import sys from sqlalchemy import text from app.database import get_db, init_db import logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) async def run_sql_file(sql_file_path): await init_db() try: with open(sql_file_path, 'r') as f: sql_content = f.read() # Split by semicolon to handle multiple statements if needed # But sqlalchemy text() might handle it. Let's try executing as one block if possible, # or split manually if it's simple. statements = [s.strip() for s in sql_content.split(';') if s.strip()] async for session in get_db(): for stmt in statements: logger.info(f"Executing: {stmt[:50]}...") await session.execute(text(stmt)) await session.commit() logger.info("SQL execution completed successfully.") except FileNotFoundError: logger.error(f"File not found: {sql_file_path}") except Exception as e: logger.error(f"Error executing SQL: {e}") if __name__ == "__main__": if len(sys.argv) < 2: print("Usage: python -m scripts.run_sql ") sys.exit(1) sql_file = sys.argv[1] asyncio.run(run_sql_file(sql_file))