scratch_chat / run_performance_migration.py
WebashalarForML's picture
Upload 178 files
330b6e4 verified
#!/usr/bin/env python3
"""
Script to run performance optimization database migration.
"""
import os
import sys
# Set environment for development
os.environ['FLASK_ENV'] = 'development'
# Use absolute path for SQLite database
import os
current_dir = os.path.dirname(os.path.abspath(__file__))
db_path = os.path.join(current_dir, 'instance', 'chat_agent.db')
os.environ['DATABASE_URL'] = f'sqlite:///{db_path}'
from app import create_app
from chat_agent.models.base import db
def run_migration():
"""Run the performance indexes migration."""
app = create_app()
with app.app_context():
print("Running performance indexes migration...")
# Read the migration file
try:
with open('migrations/002_performance_indexes_sqlite.sql', 'r') as f:
migration_sql = f.read()
except FileNotFoundError:
print("Migration file not found!")
return False
# Parse SQL statements more carefully
import re
# Remove comments and extract CREATE INDEX statements
lines = migration_sql.split('\n')
current_statement = []
statements = []
for line in lines:
line = line.strip()
# Skip comment lines
if line.startswith('--') or not line:
continue
# Add line to current statement
current_statement.append(line)
# If line ends with semicolon, we have a complete statement
if line.endswith(';'):
statement = ' '.join(current_statement)
statements.append(statement)
current_statement = []
# Add any remaining statement
if current_statement:
statement = ' '.join(current_statement)
statements.append(statement)
executed_count = 0
skipped_count = 0
print(f"Found {len(statements)} SQL statements to execute")
for i, statement in enumerate(statements):
print(f"Processing statement {i+1}: {statement[:50]}...")
try:
# Execute CREATE INDEX statements
if 'CREATE INDEX' in statement:
print(f"Executing: {statement[:80]}...")
from sqlalchemy import text
db.session.execute(text(statement))
executed_count += 1
else:
print(f"Skipping non-CREATE INDEX statement: {statement[:50]}...")
skipped_count += 1
except Exception as e:
print(f"Error executing statement: {e}")
print(f"Statement was: {statement[:100]}...")
continue
try:
db.session.commit()
print(f"Migration completed successfully!")
print(f"Executed: {executed_count} statements")
print(f"Skipped: {skipped_count} statements")
return True
except Exception as e:
print(f"Error committing migration: {e}")
db.session.rollback()
return False
if __name__ == "__main__":
success = run_migration()
sys.exit(0 if success else 1)