상세 컨텐츠

본문 제목

데이터 파일을 mysql DB에 저장하기 (pymysql, LOAD DATA INFILE)

Tech/DATABASE

by 테크투아트 2020. 7. 1. 17:08

본문

안녕하세요! 오늘은 python으로 mysql을 다뤄볼건데요!!

그 중에서도 데이터파일을 DB에 릴레이션(테이블)로 저장하는 코드에 대해 공부를 해보겠습니다!!

에러가 너무 많이나서 죽을뻔했어요.... 이거보고 언능 확인해보세요!! 에러난 것들 정리해보겠습니다.

 

제가 쓴 사용한 스택(?) 인터프리터(?)들입니다.

 

 

스택/ 인터프리터

 

1. 아나콘다 스파이더

아나콘다로는 주피터노트북만 줄창 썼었는데 스파이더는 처음 써봤어요!

파이참처럼 코드 전체를 쓰고 실행시킬 수 있다는 것이 장점....!

알았으면 진작 많이 썼을텐데 싶었습니다....ㅋㅋ큐ㅠㅠㅠ

 

2. mysql workbench

워크벤치는 파이썬으로 코드를 작성하고 확인 및 검토하는 용도로 많이 사용했습니다.

확인은 터미널에서도 많이 했어요~!!

 

3. pymysql

pymysql은 파이썬과 mysql을 연결하기 위한 라이브러리!!

파이썬 좋아요ㅎㅎㅎㅎㅎ

 

 

 

 

오늘 중점적으로 설명할 코드와 에러는

LOAD DATA LOCAL INFILE

이라는 mysql 명령어와 관련해서입니다!!!!!!!!!!!!!

 

 

데이터 파일이 csv, txt 등으로 존재할 때 이를 load해서 DB에 차곡차곡 넣어주는 명령어입니다.

 

LOAD DATA LOCAL INFILE '파일경로' INTO TABLE 테이블명 COLUMNS TERMINATED BY '|' LINES TERMINATED BY '\n';

 

명령어는 위와 같고, 초록색 부분만 바꿔주면 됩니다.

그런데 실행을 해보면 오류가 납니다.....

 

 

 

 

 

 

 

 

 

ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ

 

 

 

 

mysql 에 local_infile 설정을 안해주셔서 그럽니다...

 

 

 

이럴 때는 터미널에 쳐봅시다...

먼저 터미널로 mysql에 접속한 뒤 다음 명령어를 쳐봅시다.

 

 

 

 

 

그럼 표에 local_infile 이 OFF 되어 있는 것을 볼 수 있어요.

다음 명령어를 쳐서 local_infile 설정을 켜줍니다.

 

 

 

 

 

 

그리고 다시 위에 명령어를 쳐주면 ON으로 바뀐걸 볼 수 있어요.

 

 

 

 

 

그럼이제 quit하고 다시 들어가줄건데요, 다시 접속할때는 명령어가 좀달라요!!

 

 

 

 

 

 

 

mysql --local-infile=1 -u root -p

이렇게 접속해주셔야합니다!!!!

 

 

 

 

네 그렇게 하고 다시 파이썬에서 load infile 문을 실행하면 똑같은 에러가 또납니다!!

이는 pymysql을 작성할 때 맨위에 설정을 잘못했기 때문이에요.

 

 

 

# DB 연결


conn = pymysql.connect(host = 'localhost', user = 'root', password='비밀번호', db='DB이름', unix_socket='/tmp/mysql.sock',local_infile=1)
curs = conn.cursor()

 

파이썬으로 mysql에 연결할때는 처음에 위와 같은 코드를 작성해주어야하는데 저 connect 문 뒤에 local_infile=1을 꼭 추가해주어야합니다!! 그럼 아마 될거에요!

 

 

 

 

 

 

그리고 저는 다음과 같은 오류 때문에 진짜 몇시간동안 삽질했었는데요....

ERROR 1115 (42000) at line 3231: Unknown character set: 'utf8mb4'

 

인코딩 문제입니다...하.,..

그냥 데이터파일(csv,txt,tsv 등등)이 인코딩이 utf8로 되어있는지 잘 확인해주세요....

인코딩 잘 설정해서 다시 저장해주세요...

ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ

 

 

 

 

 

 

그럼 다들 오류에서 최대한 빨리 벗어나셔서.... 즐거운 코딩하시길 바랍니다...!!!