import os import mysql.connector from dotenv import load_dotenv from datetime import datetime load_dotenv(dotenv_path="../.env") db_config = { "host": os.getenv("MYSQL_HOST"), "port": int(os.getenv("MYSQL_PORT")), "user": os.getenv("MYSQL_USER"), "password": os.getenv("MYSQL_PASSWORD"), "database": os.getenv("MYSQL_DATABASE"), } def parse_datetime_safe(dt_string): try: return datetime.fromisoformat(dt_string.replace("Z", "").replace("+00:00", "")) except Exception: return None def parse_float_safe(value): try: return float(value) except Exception: return None def init_db(): """Creëer ruwe datatabel met unieke forecast_time.""" conn = mysql.connector.connect(**db_config) cursor = conn.cursor() cursor.execute(""" CREATE TABLE IF NOT EXISTS solar_raw_data ( id INT AUTO_INCREMENT PRIMARY KEY, forecast_time DATETIME NOT NULL UNIQUE, valid_to DATETIME, capacity FLOAT, volume FLOAT, percentage FLOAT, emission FLOAT, emission_factor FLOAT, last_update DATETIME ) """) conn.commit() cursor.close() conn.close() def insert_forecast_records(records): """Voegt ruwe forecast records toe, met veilige parsing en validatie.""" conn = mysql.connector.connect(**db_config) cursor = conn.cursor() # Haal reeds bekende timestamps op cursor.execute("SELECT forecast_time FROM solar_raw_data") existing_timestamps = set(row[0] for row in cursor.fetchall()) new_rows = 0 for record in records: forecast_time = parse_datetime_safe(record.get("validfrom", "")) if not forecast_time or forecast_time in existing_timestamps: continue try: cursor.execute(""" INSERT INTO solar_raw_data ( forecast_time, valid_to, capacity, volume, percentage, emission, emission_factor, last_update ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) """, ( forecast_time, parse_datetime_safe(record.get("validto")), parse_float_safe(record.get("capacity")), parse_float_safe(record.get("volume")), parse_float_safe(record.get("percentage")), parse_float_safe(record.get("emission")), parse_float_safe(record.get("emissionfactor")), parse_datetime_safe(record.get("lastupdate")) )) new_rows += 1 except Exception as e: print(f"❌ Fout bij record: {e}\nRecord: {record}") conn.commit() cursor.close() conn.close() print(f"✅ {new_rows} nieuwe records opgeslagen.")