251125 [ Day 95 ] - Project (16)

TaeHyun·2025년 11월 25일

TIL

목록 보기
112/184

시작하며

오늘은 DB 테이블을 수정한 뒤 24시간 이후 데이터를 시간별 평균으로 저장하는 로직을 구현해보았다.

API

def aggregate_old_data():
    """
    일정 시간 이후 데이터를 1시간 평균으로 집계하여 저장
    """
    conn, cursor = None, None
    try:
        conn, cursor = get_connection()
        if conn is None:
            print("데이터 집계 : DB 연결 실패")
            return False, "데이터 집계 : DB 연결 실패", 503
        
        # 시간 지정
        hours = 24

        # 데이터 저장
        sql_select = """
            INSERT INTO sun_data_hourly (date, hour, avg_soc, avg_solar_w, avg_lux)
            SELECT
                DATE(timestamp) as date,
                HOUR(timestamp) as hour,
                AVG(soc) as avg_soc,
                AVG(solar_w) as avg_solar_w,
                AVG(lux) as avg_lux
            FROM sun_data_realtime
            WHERE timestamp < DATE_FORMAT(NOW() - INTERVAL %s HOUR, '%Y-%m-%d %H:00:00')
            GROUP BY DATE(timestamp), HOUR(timestamp)
            ON DUPLICATE KEY UPDATE
                avg_soc = VALUES(avg_soc),
                avg_solar_w = VALUES(avg_solar_w),
                avg_lux = VALUES(avg_lux)
        """

        # 저장한 원본 데이터 제거
        sql_delete = """
            DELETE FROM sun_data_realtime
            WHERE timestamp < DATE_FORMAT(NOW() - INTERVAL %s HOUR, '%Y-%m-%d %H:00:00')
        """
        cursor.execute(sql_select, (hours-1,))
        cursor.execute(sql_delete, (hours-1,))
        conn.commit()

        print("데이터 집계 : 성공")
    
    except Exception as e:
        print(f"데이터 집계 : 오류 - {e}")
        traceback.print_exc()
        if conn:
            conn.rollback()
    
    finally:
        close_connection(conn, cursor)

마치며

하나를 마치면 계속 새롭게 걸리는 부분이 보여서 내일 또 API 수정을 진행한 뒤 아두이노 회로 구성을 마무리해야 될 것 같다.

profile
Hello I'm TaeHyunAn, Currently Studying Data Analysis

0개의 댓글