( 참고 : “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)