무엇을 배웠는가?
현주님의 정리로 MYSQL 기본문을 실제로 파이썬에서 다루는 내용을 학습하였습니다. 파이썬을 활용하여 직접적으로 MySQL DB에 접속 데이터를 조회, 수정, 삽입하는 방법을 배웠습니다. 기존에 배웠던 내용들을 바탕으로 파이썬에서 CSV 파일을 읽어오고 DB파일에 해당 파일들을 정리할 수 있었습니다.
MySQL 이란?
MySQL이란 전세계적으로 널리 사용되고 있는 오픈소스 관계형 데이터베이스이며 MySQL AB사가 개발하여 배포/판매하고 있는 데이터베이스입니다.
MySQL을 파이썬에서 다루기 위해서 알아야하는 기본 명령문
- 데이터베이스 조회 SHOW DATABASES;
- 데이터베이스 생성 CREATE DATABASE my_suppliers;
- 데이터베이스 접속 USE my_suppliers;
- 테이블 생성 CREATE TABLE IF NOT EXISTS Suppliers (Supplier_Name VARCHAR(20), Invoice_Number VARCHAR(20), Part_Number VARCHAR(20), Cost FLOAT, Purchase_Date DATE);
- 테이블 조회 SHOW TABLES;
- 테이블 구조보기 DESCRIBE Suppliers;
- 사용자 생성 CREATE USER hyunjoolee@localhost IDENTIFIED BY ‘1234qwer’;
- 데이터베이스에 대한 사용자 권한 부여 GRANT ALL PRIVILEGES ON my_suppliers.* TO hyunjoolee@localhost; FLUSH PRIVILEGES;
MySQL을 파이썬에서 적용하기 전에 준비해야 하는 사항
mysqlclient : 패키지 설치 파이썬이 MySQL 데이터베이스, 테이블과 상호작용할 수 있도록 도와주는 패키지
psycopg2 : 파이썬이 postgres 데이터베이스, 테이블과 상호작용할 수 있도록 도와주는 패키지 Python-PostgreSQL Database Adapter – 회사에서 실제 사용하는 DB를 활용하기 위해 필요한 패키지
파이썬에서 MySQL DB 활용
테이블에 새 레코드 입력하기
- MYSQL DB 접속
- CON = MySQL.db.connect(host=’ ‘, port=’ ‘, db=’ ‘, user = ‘ ‘, passwd = ‘ ‘): MYSQL DB에 접속할 수 있게 해준다.
- 커서를 활용하여 테이블에 변화를 저장할 수 있는 환경 생성
- C = CON.cursor(): 커서를 만들어서 접속한 데이터베이스의 테이블에서 SQL문을 실행하고 그 변화를 저장하는데 이용할 수 있게 한다.
- CSV 파일 읽기 및 파일 내용 수정
- CSV 파일을 읽어오고 그 값들에 변화를 주고 데이터를 입력하고 data 변수에 저장
- Excute 함수와 플레이스 홀더(%s)를 활용하여 삽입 명령문을 실제 DB에 데이터 삽입
- C.excute(“””INSERT INTO 테이블명 VALUES (%s, %s, %s, %s, %s);”””, data): data에 있는 값들을 excute함수를 활용하여 실제 DB에 입력한다.
- 변화를 DB에 저장
- CON.commit(): 위의 변화를 저장한다.
테이블 내용 검색 및 추출
- 아웃풋 파일 지정
- Output_file = “파일 경로”: CSV 입력 파일 경로와 파일명을 지정한다.
- MySQL DB 접속 및 커서를 활용하여 테이블 지정
- MySQL.db.connect 함수와, cursor 함수를 활용하여 변화를 저장하는데 이용할 수 있게 한다.
- csv.write를 통해서 파일을 만들고 읽어오기
- filewriter = csv.writer(open(output_file, ‘w’, newline=’’), delimiter=’,’)
- 커서의 execute 함수를 활용하여 select 문을 통해서 조건에 맞는 레코드 가져오기
- c.execute(“"”SELECT * FROM 테이블명 WHERE 조건;”””)
- 해당 값을 fetchall 함수를 활용하여 저장
- row = c.fetchall() 을 통해서 row에 전체 데이터를 할당한다.
- 반복문을 활용하여 해당 내용을 파일에 저장
Why? 왜 커밋을 활용하지 않고 for문을 사용하는지 Commit의 경우 DB에 변화를 직접 적용하는 용도로 활용하게 된다. 위의 코드들은 내용을 DB에 저장하는 게 아닌 파일에 활용하는 것이기 때문에 for문을 활용했다.
테이블 내용 업데이트
- DB 접속 및 cursor를 활용하여 테이블 지정
- for문을 활용하여 업데이트 할 CSV의 값을 data 변수에 저장
- excute문과 플레이스홀더를 활용하여 DB 업데이트
- c.execute(“"”UPDATE Suppliers SET Cost=%s, Purchase_Date=%s WHERE Supplier_Name=%s;”””, data)
- 변화를 DB에 저장
- CON.commit(): 위의 변화를 저장한다
심화 과정
심화 때는 규승님이 명령문을 활용해서 실제로 회사 DB를 수정하고 만드는 법을 알려주셨습니다. 실제로 회사에서 사용하는 DB에 접속해서 명령문들을 어떻게 적용하는지 배웠습니다. 실제로 DB를 수정하고 활용하는 과정을 보여주셔서 실제로 적용하는데 도움이 되었습니다.
추가 수업 – 호성님 추가적으로 객체 지향 프로그래밍에 대해서 배웠습니다. 클래스를 만들고 그 클래스에서 값들을 가진 객체들을 만들어내는 방식으로 프로그래밍을 할 경우 반복을 줄일 수 있다는 내용이었습니다. 비유를 들어주셨는데, 다양한 비유중에서 클래스를 붕어빵 틀 붕어빵을 객체로 비유해주신 내용이 기억에 납니다.
어땠는가?
스터디에서 실제로 회사 DB를 활용하는 방법을 배웠습니다. 마침 CRM 팀에서 출금요청의 수수료 데이터가 필요했고, 수업시에 배운 내용을 바탕으로 CRM팀에서 필요한 데이터를 뽑을 수 있었습니다. 데이터의 쿼리를 작성하고 데이터를 뽑아 내는 걸 직접 하면서 그간의 스터디가 헛되지 않았다는 느낌을 받았습니다. 더 열심히 해서 우리 팀이 필요한 데이터는 직접 뽑아서 활용할 수 있는 단계까지 공부하고 싶습니다. 스터디가 얼마 안 남았으니 모두 파이팅!!