import pymysql import os def get_db(): return pymysql.connect( host='localhost', user='root', password='45278434', database='crawling', charset='utf8mb4' ) def migrate_to_timeseries(): conn = get_db() try: with conn.cursor() as cursor: # 1. 기존 고유 제약 조건 제거 (project_id 중복 허용을 위함) try: cursor.execute("ALTER TABLE overseas_projects DROP INDEX project_id") print(">>> 기존 project_id 고유 제약 제거") except: pass # 2. crawl_date 컬럼 추가 (날짜별 데이터 구분을 위함) cursor.execute("DESCRIBE overseas_projects") cols = [row[0] for row in cursor.fetchall()] if 'crawl_date' not in cols: cursor.execute("ALTER TABLE overseas_projects ADD COLUMN crawl_date DATE AFTER project_id") print(">>> crawl_date 컬럼 추가") # 3. 기존 데이터의 crawl_date를 오늘로 채움 cursor.execute("UPDATE overseas_projects SET crawl_date = DATE(updated_at) WHERE crawl_date IS NULL") # 4. 새로운 복합 고유 제약 추가 (ID + 날짜 조합으로 중복 방지) # 같은 날짜에 다시 크롤링하면 덮어쓰고, 날짜가 다르면 새로 생성됨 try: cursor.execute("ALTER TABLE overseas_projects ADD UNIQUE INDEX idx_project_date (project_id, crawl_date)") print(">>> 복합 고유 제약(project_id + crawl_date) 추가 완료") except: pass conn.commit() print(">>> DB 시계열 마이그레이션 성공!") finally: conn.close() if __name__ == "__main__": migrate_to_timeseries()