#!/usr/bin/env python3 """ Apply SQL migration to existing database Usage: python apply_migration.py """ import sqlite3 import os # Database path DB_PATH = os.path.join(os.path.dirname(__file__), "data", "data.db") MIGRATION_PATH = os.path.join(os.path.dirname(__file__), "migrations", "001_add_ram_stats_and_smart.sql") def apply_migration(): """Apply the SQL migration""" if not os.path.exists(DB_PATH): print(f"❌ Database not found at {DB_PATH}") print(" The database will be created automatically on first run.") return if not os.path.exists(MIGRATION_PATH): print(f"❌ Migration file not found at {MIGRATION_PATH}") return print(f"📂 Database: {DB_PATH}") print(f"📄 Migration: {MIGRATION_PATH}") print() # Read migration SQL with open(MIGRATION_PATH, 'r') as f: migration_sql = f.read() # Connect to database conn = sqlite3.connect(DB_PATH) cursor = conn.cursor() try: # Check if columns already exist cursor.execute("PRAGMA table_info(hardware_snapshots)") columns = [row[1] for row in cursor.fetchall()] if 'ram_used_mb' in columns: print("⚠️ Migration already applied (ram_used_mb column exists)") # Check if disk_smart_data table exists cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='disk_smart_data'") if cursor.fetchone(): print("⚠️ disk_smart_data table already exists") print("✅ Database is up to date") return # Apply migration print("🔄 Applying migration...") cursor.executescript(migration_sql) conn.commit() print("✅ Migration applied successfully!") print() print("New columns added to hardware_snapshots:") print(" - ram_used_mb") print(" - ram_free_mb") print(" - ram_shared_mb") print() print("New table created:") print(" - disk_smart_data") except sqlite3.Error as e: print(f"❌ Error applying migration: {e}") conn.rollback() finally: conn.close() if __name__ == "__main__": apply_migration()