프롤로그
업무 중 구글링을 아무리 해봐도 DB 데이터를 행단위 csv 파일로 각각 저장하는 방법을 찾을 수 가 없어 직접 해결해본 끝에 작성하는 글... SQLite에 저장된 테이블 데이터를 MySQL로 가져와 Python으로 로그 시간별 행단위 csv 파일을 만들어 저장하는 과정입니다.
- Python, PyMySQL
- DBMS : SQLite(DB Browser for SQLite)
- DBMS : MariaDB(HeidiSQL)
1. SQLite의 테이블 데이터를 CSV로 내보내기
2. CSV 테이블 데이터를 MySQL로 가져오기
3. Python - pymysql 설치하기
윈도우키 + R을 눌러 실행창이 열리면 cmd를 입력 후 프롬포트 창에 pip install pymysql을 입력해 설치를 진행한다.
설치가 완료되면 프롬포트 창에 python을 입력 후 import pymysql을 입력해 모듈 관련 오류가 발생하지 않는다면 정상적으로 설치과 완료된 것이다.
4. Python 코드 작성
import pymysql
from datetime import datetime
# 조건 1. 1행당 1csv 파일 export, csv 파일명을 log2022-12-05-11-45-20.csv 형식으로 export 해야함
# 조건 2. 컬럼명을 제외한 행 데이터만 출력해야함
savePath = 'D:\WorkSpace\\restoreCSV\\'
fileExtention = '.csv'
# 시작시간 출력
print('DB to CSV Convert Start Time : ', str(datetime.now())[:19])
conn = pymysql.connect(host='DB주소', port=포트번호, user='user 이름', password='비밀번호', db='출력하고자 하는 DB', charset='utf8')
c = conn.cursor()
sql = 'SELECT * FROM 테이블명'
c.execute(sql)
rows = c.fetchall()
for x in rows:
# 저장 경로와 얻고자 하는 파일명 지정
savePath = 'D:\WorkSpace\\restoreCSV\\'
fileExtention = '.csv'
timeColumn = str(x[0]) # 예시 : 2022-12-05-11:45:20 오전
value_Year = timeColumn[0:4] # 2022
value_Month = timeColumn[5:7] # 12
value_Day = timeColumn[8:10] # 05
value_Hour = timeColumn[11:13] # 11
value_Min = timeColumn[14:16] # 45
value_Sec = timeColumn[17:19] # 20
fileName = savePath + 'log' + value_Year + '-' + value_Month + '-' + value_Day + '-' + value_Hour + '-' + value_Min + '-' + value_Sec + fileExtention # D:\WorkSpace\restoreCSV\log2022-12-05-11-45-20.csv
# 반복문을 통한 csv 파일 저장
text = ''
for y in x:
y = str(y)
text = text + y + ',' # 구분자 : ,
path = savePath + fileName + fileExtention
f = open(path, 'w')
f.writelines(text[:-1]+'\n')
f.close()
c.close()
conn.close()
# 종료시간 출력
print('DB to CSV Convert End Time : ', str(datetime.now())[:19])
5. 코드 실행 후 결과 확인
DB to CSV Convert End Time : 2022-12-14 16:07:03
DB to CSV Convert End Time : 2022-12-14 16:07:58
총 43550행의 데이터를 csv 파일로 export하는데 약 1분의 시간이 소요되었다.