118 lines
5.1 KiB
Python
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)
|