""" 2월 데이터의 current_kw 업데이트 과거 데이터의 경우 current_kw = today_kwh (시간별 발전량)로 설정 """ import sys import os from datetime import datetime, timedelta from dotenv import load_dotenv load_dotenv() if sys.platform.startswith('win'): sys.stdout.reconfigure(encoding='utf-8') sys.stderr.reconfigure(encoding='utf-8') current_dir = os.path.dirname(os.path.abspath(__file__)) sys.path.append(current_dir) from database import get_supabase_client def update_current_kw(plant_id, plant_name): """2월 데이터의 current_kw를 today_kwh로 업데이트""" print(f"\n{'='*70}") print(f"🔧 [{plant_name}] current_kw 업데이트 중...") print(f"{'='*70}") client = get_supabase_client() if not client: return # 2월 1일부터 27일까지 start = datetime(2026, 2, 1) end = datetime(2026, 2, 27) total_updated = 0 current = start while current <= end: date_str = current.strftime("%Y-%m-%d") # 해당 날짜의 모든 시간별 데이터 가져오기 result = client.table("solar_logs") \ .select("id, current_kw, today_kwh") \ .eq("plant_id", plant_id) \ .gte("created_at", f"{date_str}T00:00:00") \ .lt("created_at", f"{(current + timedelta(days=1)).strftime('%Y-%m-%d')}T00:00:00") \ .execute() if not result.data: current += timedelta(days=1) continue # current_kw가 0이고 today_kwh가 0이 아닌 레코드만 업데이트 updated_count = 0 for record in result.data: if record['current_kw'] == 0 and record['today_kwh'] != 0: try: # current_kw를 today_kwh로 업데이트 client.table("solar_logs") \ .update({"current_kw": record['today_kwh']}) \ .eq("id", record['id']) \ .execute() updated_count += 1 except Exception as e: print(f" ⚠️ 업데이트 실패 (id: {record['id']}): {e}") if updated_count > 0: print(f" ✅ {date_str}: {updated_count}건 업데이트") total_updated += updated_count current += timedelta(days=1) print(f"\n✅ [{plant_name}] 총 {total_updated}건 업데이트 완료") def main(): plants = [ ('kremc-05', '5호기'), ('nrems-09', '9호기') ] print("\n" + "="*70) print("🔧 2월 데이터 current_kw 업데이트 시작") print("="*70) for plant_id, plant_name in plants: update_current_kw(plant_id, plant_name) print("\n" + "="*70) print("🎉 current_kw 업데이트 완료!") print("="*70 + "\n") if __name__ == "__main__": main()