[Python] pymysql로 MaridDB 연결 클래스 모듈화

YS K·2022년 6월 16일

Python

목록 보기
1/1
# -*- 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 클래스를 하나 생성해두면 다른 파일에서 불러와 바로 사용 가능

  • SELECT
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, INSERT, DELETE) ONE
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)
  • (UPDATE, INSERT, DELETE) ALL
# 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도 동일한 방식으로 사용할 수 있음

다른 방법도 있겠지만 위 방법이 알아보기도 쉽고 편해서 위 방법을 사용함

0개의 댓글