AutoPercenty3/upload_categories.py

118 lines
5.1 KiB
Python

import logging
import sqlite3
from src.sp_manager import SupabaseManager
from datetime import datetime
from loggerModule import Logger
import getpass
def upload_categories_from_db_to_supabase(db_path):
try:
# 로깅 설정
logging.basicConfig(level=logging.INFO, format='%(asctime)s [%(levelname)s] %(message)s')
logger = Logger()
# 로그인 정보 입력 받기
logger.log("Supabase 로그인이 필요합니다.")
email = input("이메일 주소를 입력하세요: ")
password = getpass.getpass("비밀번호를 입력하세요: ")
# Supabase 연결
logger.log("Supabase에 연결 중...")
sp_manager = SupabaseManager(logger=logger)
# 로그인 시도
logger.log("Supabase에 로그인 시도 중...")
login_result = sp_manager.login(email, password)
if not login_result:
logger.log("로그인에 실패했습니다. 프로그램을 종료합니다.")
return False
logger.log("로그인 성공!")
# SQLite 데이터베이스 연결
logger.log(f"데이터베이스 '{db_path}'에서 카테고리 데이터 로드 중...")
conn = sqlite3.connect(db_path)
conn.row_factory = sqlite3.Row
cursor = conn.cursor()
# base_category 테이블에서 데이터 읽기
cursor.execute("SELECT * FROM base_category")
rows = cursor.fetchall()
if not rows:
logger.log("base_category 테이블에 데이터가 없습니다.")
conn.close()
return False
# 데이터 준비
current_time = datetime.now().isoformat()
records = []
for row in rows:
record = {
'category1': row['category1'] if row['category1'] is not None else '',
'category2': row['category2'] if row['category2'] is not None else '',
'category3': row['category3'] if row['category3'] is not None else '',
'category4': row['category4'] if row['category4'] is not None else '',
'p_ss_category_code': row['p_ss_category_code'],
'is_valid': True,
'created_at': current_time,
'updated_at': current_time
}
records.append(record)
conn.close()
logger.log(f"{len(records)}개의 카테고리 레코드를 로드했습니다.")
# 테이블 존재 여부 확인만 하고, 존재하지 않으면 생성
logger.log("base_category 테이블 확인 중...")
try:
# 단순히 한 개의 레코드를 가져와서 테이블이 존재하는지 확인
sp_manager.client.table("base_category").select("*").limit(1).execute()
logger.log("base_category 테이블이 이미 존재합니다.")
except Exception as e:
# 테이블이 없는 경우 생성
logger.log("base_category 테이블 생성 중...")
sp_manager.create_base_category_table()
# 데이터 업로드
logger.log(f"{len(records)}개의 카테고리 데이터를 Supabase에 업로드 중...")
# 일괄 삽입
try:
# 테이블이 비어있다고 했으므로 삭제 작업 생략
logger.log("카테고리 데이터 업로드 시작...")
# 새 데이터 삽입
batch_size = 100
for i in range(0, len(records), batch_size):
batch = records[i:i+batch_size]
try:
response = sp_manager.client.table("base_category").insert(batch).execute()
logger.log(f"배치 {i//batch_size + 1} 업로드 완료: {len(batch)}개 레코드")
except Exception as e:
logger.log(f"배치 업로드 중 오류 발생: {str(e)}")
# 오류 발생 시 더 작은 배치로 시도
if len(batch) > 1:
logger.log("배치 크기를 줄여서 다시 시도합니다.")
for single_record in batch:
try:
sp_manager.client.table("base_category").insert(single_record).execute()
logger.log("한 개 레코드 업로드 완료")
except Exception as inner_e:
logger.log(f"단일 레코드 업로드 중 오류 발생: {str(inner_e)}")
logger.log("모든 카테고리 데이터가 성공적으로 업로드되었습니다.")
return True
except Exception as e:
logger.log(f"데이터 업로드 중 오류 발생: {str(e)}")
return False
except Exception as e:
logger.log(f"카테고리 업로드 중 오류 발생: {str(e)}")
return False
if __name__ == "__main__":
db_path = "user_data/user_data_909d2ef8-7053-4006-ab40-49eb49f20383.db" # DB 파일 경로
upload_categories_from_db_to_supabase(db_path)