( 참고 자료 : https://wikidocs.net/book/3348 )

PyMySQL

  1. 패키지 설치하기

  2. DB에 데이터 추가/수정/삭제

  3. SQL Placeholder 사용
  4. DB에서 데이터 로드하기


이전 포스트에서, 칼럼을 생성하는데에 있어서 오타가 있었어서 이부분에 대한 수정을 한 뒤 진행하였다.

figure2

  • 주의 : 칼럼명으로 rank는 사용하면 안된다 ( 내재함수 rank와 중첩 우려 )


1. 프로그램 설치하기

(1) PyMySQL 패키지 설치

pip install PyMySQL


(2) MySQL Python Connector 설치

https://dev.mysql.com/downloads/

figure2

figure2


2. DB에 데이터 추가/수정/삭제

figure2

figure2

위와 같은 방식으로 host, 포트번호 등을 확인할 수 있다.


(0) DB에 연결하기

  1. 패키지 불러오기
import pymysql
import logging
import sys


  1. 연결 정보 입력
HOST = 'localhost'
USER = 'root'
PW = ########################
DB = 'kobis'
PORT = 3306


  1. 연결하기
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

  1. SQL문을 짜기
sql = "INSERT INTO boxoffice (targetDt,ranking,rankOldAndNew,movieCd,movieNm,salesAmt,audiCnt) VALUES (20180220,11,'OLD',20170511,'코난',36388900,48011);"


  1. execute & commit
cur.execute(sql)
conn.commit()


  1. 실행결과 확인
cur.rowcount


(2) 수정 : UPDATE

  1. SQL문을 짜기
sql = "UPDATE boxoffice SET movieNm = '코난2' WHERE targetDt = 20180220 AND ranking = 11;"

( 이하 동일 )


(3) 삭제 : DELETE

  1. 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()

Tags:

Categories:

Updated: