일단 엑셀의 구조는 이렇게 있고,각인덱스 데이터마다 스페이스,매체,프로그램에 해당하는 태그들을 TB_EXHIT_TAG 테이블에
[ 플랫폼 라이브 인덱스 10 , 중정 인덱스 12 , 다원예술 인덱스 13] 일경우 밑에처럼 이렇게 삽입한다.
905 / 10 / 현재시간
905/ 12 / 현재시간
905/ 13 / 현재시간
import pandas as pd
import mysql.connector
# MySQL 데이터베이스 연결 설정
db_config = {
'user': '계정이름',
'password': '비번',
'host': '호스트',
'port': 포트번호,
'database': 'DB이름'
}
# MySQL 연결
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor()
# 엑셀 파일 경로
file_path = '/Users/seok/Downloads/아카이브 리스트 - 태그 정리.xlsx'
# 엑셀 파일 읽기
df = pd.read_excel(file_path, header=2)
tag_dic = {
'갤러리': 10, '아넥스': 11, '렉쳐룸': 12, '머신룸': 13, '플랫폼 라이브': 14, '스토어': 15, '중정': 16,
'다원예술': 17, '뉴미디어': 18, '패션': 19, '건축': 20, '사진': 21, '디자인': 22, '공예': 23, '회화': 24,
'드로잉': 25, '판화': 26, '조각/ 설치': 27, '전시': 28, '공연': 29, '클래스': 30, '포럼': 31, '이벤트': 32
}
result=0
# DB에 저장할 함수 예시
def insert_into_db(exhibit_idx, tag_list, db_cursor):
global result
if tag_list is not None:
for tag in tag_list:
tag_idx = tag_dic[tag]
query = "INSERT INTO PRACTICE (EXHIBIT_CONTENTS_IDX, TAG_IDX,REG_DTTM) VALUES (%s, %s,NOW())"
db_cursor.execute(query, (exhibit_idx, tag_idx))
result +=1
else:
for tag_idx in tag_dic.values():
query = "INSERT INTO PRACTICE (EXHIBIT_CONTENTS_IDX, TAG_IDX,REG_DTTM) VALUES (%s, %s,NOW())"
db_cursor.execute(query, (exhibit_idx, tag_idx))
result +=1
# 각 행을 처리
for index, row in df.iterrows():
idx = row['idx']
check = 0
if idx not in (887,384,375,372,368,215,214,127,84,83):
# 스페이스
spaces = [row[i] for i in range(3, 8) if pd.notna(row[i])]
if spaces is not None:
insert_into_db(idx, spaces, cursor)
check += len(spaces)
# 매체
media = [row[i] for i in range(8, 14) if pd.notna(row[i])]
if media is not None:
insert_into_db(idx, media, cursor)
check += len(media)
# 프로그램
programs = [row[i] for i in range(14, 19) if pd.notna(row[i])]
if programs is not None:
insert_into_db(idx, programs, cursor)
check += len(programs)
elif idx in(887,384,375,372,368,215,214,127):
continue
else:
insert_into_db(idx,None, cursor)
check += 24
print("체크",idx,"=>",check)
print("결과 갯수->",result)
# 변경사항 커밋
conn.commit()
# 커서와 연결 닫기
cursor.close()
conn.close()
코드를 보면 먼저 DB설정 해주고, df = pd.read_excel(file_path, header=2) 에 헤더2는 인덱스 2번째 행부터 읽는다 하는거다.
for index, row in df.iterrows():
의 반복문을 통해서 해당 인덱스 데이터에 스페이스,매체,프로그램 태그들을 리스트에 넣는데
range(3,8)은 위에 엑셀 사진보면 스페이스에 태그가 인덱스 3부터7까지니 range(3,8) 한거다.
insert_into_db(idx, spaces, cursor)
이 메소드를 호출해서 DB에 저장한다(cursor은 DB설정에서 했던거)
인서트 메소드는 스페이스,매체,프로그램 리스트가 비어있지 않으면 반복문을 통해 각 리스트 요소를 tad_dic의 값(태그의 인덱스)을 찾아오고 DB에 저장하는거다.
'플랫폼엘 정리or해석' 카테고리의 다른 글
DB 조회시 인덱스 기능 (0) | 2024.08.05 |
---|---|
css,JavaScript관련 (0) | 2024.07.18 |
커스텀 어노테이션 적용후,인터셉터에 적용하기 (0) | 2024.07.12 |
실무 다른 동료 SQL문 분석 (0) | 2024.07.11 |
MySql의 암호화,복호화 (0) | 2024.07.04 |