( 참고 자료 : https://wikidocs.net/book/3348 )
PyMySQL
-
패키지 설치하기
-
DB에 데이터 추가/수정/삭제
- SQL Placeholder 사용
- DB에서 데이터 로드하기
이전 포스트에서, 칼럼을 생성하는데에 있어서 오타가 있었어서 이부분에 대한 수정을 한 뒤 진행하였다.
- 주의 : 칼럼명으로
rank
는 사용하면 안된다 ( 내재함수 rank와 중첩 우려 )
1. 프로그램 설치하기
(1) PyMySQL 패키지 설치
pip install PyMySQL
(2) MySQL Python Connector 설치
https://dev.mysql.com/downloads/
2. DB에 데이터 추가/수정/삭제
위와 같은 방식으로 host, 포트번호 등을 확인할 수 있다.
(0) DB에 연결하기
- 패키지 불러오기
import pymysql
import logging
import sys
- 연결 정보 입력
HOST = 'localhost'
USER = 'root'
PW = ########################
DB = 'kobis'
PORT = 3306
- 연결하기
try:
conn = pymysql.connect(host = HOST, user = USER , password = PW, charset = 'utf8', db = DB)
port = PORT, use_unicode=True)
cursor = conn.cursor()
except:
logging.error("RDS 연결 실패")
sys.exit(1)
(1) 추가 : INSERT
- SQL문을 짜기
sql = "INSERT INTO boxoffice (targetDt,ranking,rankOldAndNew,movieCd,movieNm,salesAmt,audiCnt) VALUES (20180220,11,'OLD',20170511,'코난',36388900,48011);"
- execute & commit
cur.execute(sql)
conn.commit()
- 실행결과 확인
cur.rowcount
(2) 수정 : UPDATE
- SQL문을 짜기
sql = "UPDATE boxoffice SET movieNm = '코난2' WHERE targetDt = 20180220 AND ranking = 11;"
( 이하 동일 )
(3) 삭제 : DELETE
- SQL문을 짜기
sql = 'DELETE FROM boxoffice WHERE targetDt = 20180220 AND rank = 11;'
( 이하 동일 )
[ 연결 끊기 ]
conn.close()
3. SQL placeholder 사용
# (1) DB 명
table_name = 'kobis'
# (2) 변수 명
colnames = ['targetDt', 'ranking', 'rankOldAndNew', 'movieCd', 'movieNm', 'salesAmt', 'audiCnt']
# (3-1) 입력 데이터 내용
insert_data = [20180220,12,'OLD',20170511,'코난',36388900,48011]
#------------------------------------------------------------#
# (3-2) 입력 데이터가 대체 될 placeholder
placeholders = ', '.join(['%s'] * len(colnames))
sql = "INSERT INTO %s ( %s ) VALUES ( %s )" % (table_name, colnames, placeholders)
cursor.execute(sql, insert_data)
conn.commit()
4. DB에서 데이터 로드하기
tuple 형태로 불러오기
cursor = conn.cursor()
딕셔너리 형태로 데이터 불러오기
cursor = conn.cursor(pymysql.cursors.DictCursor)
그 이후, 데이터 불러오는 코드는 동일
cursor.execute('SELECT * FROM boxoffice;')
rows = cur.fetchall()
conn.close()