Files
Brancheneinstufung2/company-explorer/fix_missing_columns.py

96 lines
2.9 KiB
Python
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import sqlite3
import os
DB_PATH = "/data/companies_v3_fixed_2.db"
# Fallback for local testing
if not os.path.exists(DB_PATH):
DB_PATH = "company-explorer/companies_v3_fixed_2.db"
def add_column(cursor, table, column, type_def):
try:
cursor.execute(f"ALTER TABLE {table} ADD COLUMN {column} {type_def}")
print(f"✅ Added {table}.{column}")
except sqlite3.OperationalError as e:
if "duplicate column name" in str(e).lower():
print(f" {table}.{column} already exists")
else:
print(f"❌ Error adding {table}.{column}: {e}")
def migrate():
print(f"Starting migration for {DB_PATH}...")
if not os.path.exists(DB_PATH):
print(f"❌ Database not found at {DB_PATH}")
return
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()
# Columns for 'companies' table
company_cols = [
("street", "TEXT"),
("zip_code", "TEXT"),
("city", "TEXT"),
("country", "TEXT DEFAULT 'DE'"),
("calculated_metric_name", "TEXT"),
("calculated_metric_value", "FLOAT"),
("calculated_metric_unit", "TEXT"),
("standardized_metric_value", "FLOAT"),
("standardized_metric_unit", "TEXT"),
("metric_source", "TEXT"),
("metric_proof_text", "TEXT"),
("metric_source_url", "TEXT"),
("metric_confidence", "FLOAT"),
("metric_confidence_reason", "TEXT"),
("ai_opener", "TEXT"),
("ai_opener_secondary", "TEXT"),
("research_dossier", "TEXT")
]
# Columns for 'industries' table
industry_cols = [
("status_notion", "TEXT"),
("is_focus", "BOOLEAN DEFAULT 0"),
("pains", "TEXT"),
("gains", "TEXT"),
("notes", "TEXT"),
("priority", "TEXT"),
("ops_focus_secondary", "BOOLEAN DEFAULT 0"),
("strategy_briefing", "TEXT"),
("metric_type", "TEXT"),
("min_requirement", "FLOAT"),
("whale_threshold", "FLOAT"),
("proxy_factor", "FLOAT"),
("scraper_search_term", "TEXT"),
("scraper_keywords", "TEXT"),
("standardization_logic", "TEXT"),
("primary_category_id", "INTEGER"),
("secondary_category_id", "INTEGER")
]
# Columns for 'contacts' table
contact_cols = [
("so_contact_id", "INTEGER"),
("so_person_id", "INTEGER"),
("role", "TEXT"),
("status", "TEXT"),
("unsubscribe_token", "TEXT"),
("is_primary", "BOOLEAN DEFAULT 0")
]
for col, dtype in company_cols:
add_column(cursor, "companies", col, dtype)
for col, dtype in industry_cols:
add_column(cursor, "industries", col, dtype)
for col, dtype in contact_cols:
add_column(cursor, "contacts", col, dtype)
conn.commit()
conn.close()
print("Migration complete.")
if __name__ == "__main__":
migrate()