# -*- coding: utf-8 -*-
# db_connect.py
import pymysql
class Connection:
def __init__(self):
self.con = pymysql.connect(
host='192.168.2.27',
port=3306,
user='username',
password='pass123',
db='dbname',
autocommit=True, # 결과 DB 반영 (Insert or update)
charset='utf8mb4', # 한글처리 (charset = 'utf8')
cursorclass=pymysql.cursors.DictCursor # DB조회시 컬럼명을 동시에 보여줌
)
self.cur = self.con.cursor()
def select_one(self, sql, args=None):
self.cur.execute(sql, args)
result = self.cur.fetchone()
self.cur.close()
self.con.close()
return result
def select_all(self, sql, args=None):
self.cur.execute(sql, args)
result = self.cur.fetchall()
self.cur.close()
self.con.close()
return result
def save_one(self, sql, args=None):
result = self.cur.execute(sql, args)
self.cur.close()
self.con.close()
return result
def save_all(self, sql, args=None):
result = self.cur.executemany(sql, args)
self.cur.close()
self.con.close()
return result
위와 같이 DB 클래스를 하나 생성해두면 다른 파일에서 불러와 바로 사용 가능
def get_data_by_cid(cid):
sql = "SELECT * FROM TB_RAW WHERE CID = " + cid
conn = db_connect.Connection()
rows = conn.selectAll(sql)
df = pd.DataFrame(rows)
return df
update_list = [1,2,3,4,5,'a1234']
sql = """UPDATE tb_module SET C_A = %s, C_B = %s, C_C = %s, C_D = %s, C_E = %s WHERE CID = %s """
# UPDATE
conn = db_connect.Connection()
conn.save_one(sql, update_list)
# raw_data는 데이터프레임이다.
# for문으로 update_list 가공하여 UPDATE 시킴
update_list = []
for idx, row in raw_data.iterrows():
A = round(row['A'], 4)
B = round(row['B'], 4)
C = round(row['C'], 4)
cid = row['CID']
dtm = str(row['DTM'])
update_list.append([A, B, C, cid, dtm])
# UPDATE QUERY
sql = """UPDATE TB_RAW SET C_A = %s, C_B = %s, C_C = %s WHERE CID = %s AND DTM = %s"""
# UPDATE
conn = db_connect.Connection()
conn.save_all(sql, update_list)
one과 all을 분리한 이유는 executmany를 넣을 때 1차원 리스트를 넣으면 에러가 뜨므로 구분을 위해서 분리함
UPDATE 쿼리만 예제로 사용했지만, INSERT DELETE도 동일한 방식으로 사용할 수 있음
다른 방법도 있겠지만 위 방법이 알아보기도 쉽고 편해서 위 방법을 사용함