LinkDesk/backend/recreate_database.py

97 lines
2.9 KiB
Python

#!/usr/bin/env python3
"""
Recreate the database with proper schema and migrate existing data.
"""
import sqlite3
import os
from pathlib import Path
def backup_projects_data():
"""Backup existing projects data."""
print("Backing up existing projects data...")
db_path = "vfx_project_management.db"
try:
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
# Get all projects data
cursor.execute("SELECT * FROM projects")
projects = cursor.fetchall()
# Get column names
cursor.execute("PRAGMA table_info(projects)")
columns = [col[1] for col in cursor.fetchall()]
return projects, columns
except Exception as e:
print(f"Error backing up data: {e}")
return [], []
finally:
if conn:
conn.close()
def recreate_database():
"""Recreate the database with proper schema."""
print("Recreating Database with Proper Schema")
print("=" * 40)
# Backup existing data
projects_data, columns = backup_projects_data()
print(f"Backed up {len(projects_data)} projects")
# Remove old database
db_path = "vfx_project_management.db"
if os.path.exists(db_path):
os.remove(db_path)
print("Removed old database")
# Import and create new database schema
try:
from database import engine, Base
import models # This imports all models
# Create all tables with proper schema
Base.metadata.create_all(bind=engine)
print("Created new database schema")
# Restore projects data if any
if projects_data:
print("Restoring projects data...")
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
for project in projects_data:
# Map old data to new schema
insert_sql = """
INSERT INTO projects (
id, name, description, status, start_date, end_date,
created_at, updated_at, code_name, client_name, project_type,
frame_rate, data_drive_path, publish_storage_path,
delivery_image_resolution, delivery_movie_specs_by_department
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
"""
cursor.execute(insert_sql, project)
conn.commit()
conn.close()
print(f"Restored {len(projects_data)} projects")
print("✅ Database recreated successfully!")
return True
except Exception as e:
print(f"❌ Error recreating database: {e}")
import traceback
traceback.print_exc()
return False
if __name__ == "__main__":
recreate_database()