1
This commit is contained in:
61
backend/apply_migration_006.py
Normal file
61
backend/apply_migration_006.py
Normal file
@@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Apply SQL migration 006 to existing database
|
||||
Migration 006: Add purchase metadata fields to devices table
|
||||
"""
|
||||
|
||||
import os
|
||||
import sqlite3
|
||||
|
||||
DB_PATH = os.path.join(os.path.dirname(__file__), "data", "data.db")
|
||||
MIGRATION_PATH = os.path.join(
|
||||
os.path.dirname(__file__), "migrations", "006_add_purchase_fields.sql"
|
||||
)
|
||||
|
||||
COLUMNS = ["purchase_store", "purchase_date", "purchase_price"]
|
||||
|
||||
|
||||
def apply_migration():
|
||||
if not os.path.exists(DB_PATH):
|
||||
print(f"❌ Database not found at {DB_PATH}")
|
||||
print(" It will be created automatically on first backend start.")
|
||||
return
|
||||
|
||||
if not os.path.exists(MIGRATION_PATH):
|
||||
print(f"❌ Migration file not found at {MIGRATION_PATH}")
|
||||
return
|
||||
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
cursor = conn.cursor()
|
||||
|
||||
try:
|
||||
cursor.execute("PRAGMA table_info(devices)")
|
||||
existing_columns = {row[1] for row in cursor.fetchall()}
|
||||
|
||||
missing = [col for col in COLUMNS if col not in existing_columns]
|
||||
if not missing:
|
||||
print("⚠️ Migration 006 already applied (purchase columns exist)")
|
||||
return
|
||||
|
||||
print("🔄 Applying migration 006 (purchase fields)...")
|
||||
with open(MIGRATION_PATH, "r", encoding="utf-8") as f:
|
||||
statements = [
|
||||
stmt.strip()
|
||||
for stmt in f.read().split(";")
|
||||
if stmt.strip()
|
||||
]
|
||||
|
||||
for stmt in statements:
|
||||
cursor.execute(stmt)
|
||||
|
||||
conn.commit()
|
||||
print("✅ Migration 006 applied successfully.")
|
||||
except sqlite3.Error as exc:
|
||||
conn.rollback()
|
||||
print(f"❌ Error applying migration 006: {exc}")
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
apply_migration()
|
||||
Reference in New Issue
Block a user