안녕하세요! 오늘은 python으로 mysql을 다뤄볼건데요!!
그 중에서도 데이터파일을 DB에 릴레이션(테이블)로 저장하는 코드에 대해 공부를 해보겠습니다!!
에러가 너무 많이나서 죽을뻔했어요.... 이거보고 언능 확인해보세요!! 에러난 것들 정리해보겠습니다.
제가 쓴 사용한 스택(?) 인터프리터(?)들입니다.
1. 아나콘다 스파이더
아나콘다로는 주피터노트북만 줄창 썼었는데 스파이더는 처음 써봤어요!
파이참처럼 코드 전체를 쓰고 실행시킬 수 있다는 것이 장점....!
알았으면 진작 많이 썼을텐데 싶었습니다....ㅋㅋ큐ㅠㅠㅠ
2. mysql workbench
워크벤치는 파이썬으로 코드를 작성하고 확인 및 검토하는 용도로 많이 사용했습니다.
확인은 터미널에서도 많이 했어요~!!
3. pymysql
pymysql은 파이썬과 mysql을 연결하기 위한 라이브러리!!
파이썬 좋아요ㅎㅎㅎㅎㅎ
오늘 중점적으로 설명할 코드와 에러는
이라는 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로 되어있는지 잘 확인해주세요....
인코딩 잘 설정해서 다시 저장해주세요...
ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ
그럼 다들 오류에서 최대한 빨리 벗어나셔서.... 즐거운 코딩하시길 바랍니다...!!!