mirror of
https://github.com/mindverse/Second-Me.git
synced 2026-07-10 17:58:23 +00:00
101 lines
3.7 KiB
Python
Executable file
101 lines
3.7 KiB
Python
Executable file
#!/usr/bin/env python
|
|
"""
|
|
Database Migration Script - Add instance_password column to tables with instance_id
|
|
|
|
This script adds the instance_password column to tables that have instance_id but not instance_password in the SQLite database.
|
|
It should be run once to update the database schema.
|
|
"""
|
|
|
|
import os
|
|
import sqlite3
|
|
import logging
|
|
from pathlib import Path
|
|
import sys
|
|
|
|
# Add project root to path
|
|
project_root = str(Path(__file__).parent.parent)
|
|
sys.path.insert(0, project_root)
|
|
|
|
from lpm_kernel.configs.config import Config
|
|
|
|
# Configure logging
|
|
logging.basicConfig(
|
|
level=logging.INFO,
|
|
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
|
|
)
|
|
logger = logging.getLogger(__name__)
|
|
|
|
def get_db_path():
|
|
"""Get the database path from environment or use default"""
|
|
config = Config.from_env()
|
|
db_path = config.get("SQLITE_DB_PATH", os.path.join(project_root, "data", "sqlite", "lpm.db"))
|
|
return db_path
|
|
|
|
def migrate_database():
|
|
"""Add instance_password column to tables with instance_id"""
|
|
db_path = get_db_path()
|
|
|
|
logger.info(f"Using database at: {db_path}")
|
|
|
|
# Check if database file exists
|
|
if not os.path.exists(db_path):
|
|
logger.error(f"Database file not found at {db_path}")
|
|
return False
|
|
|
|
# Default password to use
|
|
default_password = "mindverse666"
|
|
|
|
try:
|
|
# Connect to the database
|
|
conn = sqlite3.connect(db_path)
|
|
cursor = conn.cursor()
|
|
|
|
# List all tables
|
|
cursor.execute("SELECT name FROM sqlite_master WHERE type='table'")
|
|
tables = cursor.fetchall()
|
|
logger.info(f"Tables in database: {[table[0] for table in tables]}")
|
|
|
|
# Check for any table that might have instance_id but not instance_password
|
|
for table_name in [table[0] for table in tables]:
|
|
# Get columns for this table
|
|
cursor.execute(f"PRAGMA table_info({table_name})")
|
|
table_columns = cursor.fetchall()
|
|
table_column_names = [column[1] for column in table_columns]
|
|
|
|
# If table has instance_id but not instance_password
|
|
if "instance_id" in table_column_names and "instance_password" not in table_column_names:
|
|
logger.info(f"Table {table_name} has instance_id but not instance_password")
|
|
logger.info(f"Adding instance_password column to {table_name} table")
|
|
cursor.execute(f"ALTER TABLE {table_name} ADD COLUMN instance_password VARCHAR(255) DEFAULT '{default_password}'")
|
|
logger.info(f"Added instance_password column to {table_name} table with default value '{default_password}'")
|
|
|
|
# Update existing rows to set the default password where instance_id is not null
|
|
cursor.execute(f"UPDATE {table_name} SET instance_password = '{default_password}' WHERE instance_id IS NOT NULL AND instance_password IS NULL")
|
|
updated_rows = cursor.rowcount
|
|
logger.info(f"Updated {updated_rows} rows in {table_name} with default password")
|
|
|
|
# Commit the changes
|
|
conn.commit()
|
|
logger.info("Migration completed successfully")
|
|
|
|
# Close the connection
|
|
conn.close()
|
|
return True
|
|
|
|
except sqlite3.Error as e:
|
|
logger.error(f"SQLite error: {e}")
|
|
return False
|
|
except Exception as e:
|
|
logger.error(f"Error during migration: {e}")
|
|
return False
|
|
|
|
if __name__ == "__main__":
|
|
logger.info("Starting database migration")
|
|
success = migrate_database()
|
|
|
|
if success:
|
|
logger.info("Migration completed successfully")
|
|
sys.exit(0)
|
|
else:
|
|
logger.error("Migration failed")
|
|
sys.exit(1)
|