[MySQL] python을 이용해 CSV를 MySQL에 적재

안녕하세요. 오늘은 베스핀글로벌 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

Leave a Comment