( 참고 : “FastCampus, 데이터 엔지니어링 올인원” )

[ Data Engineering ]

Pymysql (1)


Python script안에서 DB에 connect해서 데이터 넣기 & 빼기!

사용하는 package : pymysql


1. Basic Setup

import sys
import requests
import base64
import json
import logging
import pymysql


client_id = "74cbd487458843f1ad3f5fa1e914c02f"
client_secret = "752e4ed11062473f9da9076c4499d51b"

host = "fastcampus.cxxbo4jh5ykm.ap-northeast-2.rds.amazonaws.com"
port = 3306
username = "sean"
database = "production"
password = "fastcampus"


2. Connect to RDS

try:
    conn = pymysql.connect(host, user=username, passwd=password, db=database, port=port, use_unicode=True, charset='utf8')
    cursor = conn.cursor()
except:
    logging.error("could not connect to rds")
    sys.exit(1)


3. Execute

코드 시행하기

  • cursor.exectue('SHOW TABLES')

    print(cursor.fetchall())


4. Row 추가하는 함수

SQL문을 반복적으로 작성하는 것을 피하기 위한 함수

  • placeholder
    • data마다 몇 개의 column을 가질지는 가변적이다
    • 따라서, “,”를 기준으로 나눠줘서 placeholder를 자동적으로 생성하도록 한다
    • ex) ‘%s’, ‘%s’, ‘%s’, ‘%s’, ‘%s’
  • columns
    • 데이터의 key를 연결한다
    • ex) ‘id’,’name’,’followers’,’…..
  • key_placeholders
    • 위의 placeholder & column을 매칭해준다
    • ex) [ id=%s, name=%s, followers=%s…. ]
  • 위를 통해 sql문을 작성하고, cursor.execute로 해당 sql문을 시행한다.
def insert_row(cursor, data, table):

    placeholders = ', '.join(['%s'] * len(data))
    columns = ', '.join(data.keys())
    key_placeholders = ', '.join(['{0}=%s'.format(k) for k in data.keys()])
    sql = "INSERT INTO %s ( %s ) VALUES ( %s ) ON DUPLICATE KEY UPDATE %s" % (table, columns, placeholders, key_placeholders)
    cursor.execute(sql, list(data.values())*2)