안녕하세요. 오늘은 베스핀글로벌 D&A실 왕승준님이 작성해 주신 python을 이용해 CSV를 MySQL에 적재에 대해 알아보겠습니다.
WORKBENCH로도 가능하나 WORKBENCH의 경우 CSV 파일을 1row 씩 읽어 INSERT 후 COMMIT을 하는 것으로 보입니다.
공유드리는 간단한 Python script의 경우 전체 Excel 파일을 한 번에 읽어들인 후 한 번의 COMMIT만을 찍어 속도적인 측면에서 압도적인 차이가 있습니다.
현재 진행하고 있는 프로젝트에서는 100여 개 이상의 csv파일이 있어 이를 bastion에 모두 올려놓은 후 python script를 background로 돌리고 있습니다.
1. 사전 준비사항
python
pip install scipy
pip install pymysql
2. 수정 필요 사항
1) pymysql.connect 의 접속정보
2) f = open 의 파일 경로
3) 컬럼 매핑 정보
4) insert 구문 및 curs.execute 의 컬럼정보
3. 전체 구문
#-*- coding:utf-8 -*-
import scipy.io
import csv
import pymysql
# 로컬 mysql과 커넥션 수행
conn = pymysql.connect(host=’sprh-dev-rds-instance-1.cvgfiefdenmj.eu-west-1.rds.amazonaws.com’,port=13306, user=’admin’, password=’Abcd1234!’, db=’prh’, charset=’utf8′)
curs = conn.cursor()
conn.commit()
# CSV 파일 경로
f = open(r’/home/ec2-user/qings/S22P__9.csv’)
csvReader = csv.reader(f)
# 컬럼 매핑
for row in csvReader:
model = (row[0])
ser_no = (row[1])
fw_ver = (row[2])
imei = (row[3])
octa_no = (row[4])
type = (row[5])
logtimestamp = (row[6])
componentlist = (row[7])
type_seq = (row[8])
print(model)
print(ser_no)
print(fw_ver)
print(imei)
print(octa_no)
print(type)
print(logtimestamp)
print(componentlist)
print(type_seq)
sql = “””insert into tb_qings (model, ser_no, fw_ver, imei, octa_no, type, logtimestamp, componentlist, type_seq) values (%s, %s, %s, %s, %s, %s, %s, %s, %s) “””
curs.execute(sql, (model, ser_no, fw_ver, imei, octa_no, type, logtimestamp, componentlist, type_seq))
# DB의 변화 저장
conn.commit()
f.close()
conn.close()
감사합니다~ 🙂
문의: info@bespinglobal.com | 대표번호: 02-1668-1280