직접짠꿀코드/SQL,pymysql

pymysql upsert 쿼리문 우아하게 작성하기

bbmon2 2023. 5. 16. 18:47

 

1. 문제정의

Pymysql 라이브러리를 활용하여 upsert하는 query string을 작성 시, 반복되는 부분도 많고, 문법 오류가 종종 발생함.

좀 더 체계적으로 작성하고자 하여 Class 형태로 구현

 

 

2. 해결방향

make_qv 함수를 통해 query, value를 통일된 포멧으로 작성하고 ON DUPLICATE KEY를 이용해 Upsert 코드를 작성

 

 

3. 코드

class Create_Queries:
    def __init__(self):
        pass
        # self.tb_nm = tb_nm
        # self.upd_lst = upd_lst

    def make_qv(self, upd_lst:list):
        # query
        q_lst = ', '.join(upd_lst)

        # update value
        v_upd = ""
        for s in upd_lst:
            add = '%s = VALUES(%s), '  % (s, s)
            v_upd += add
        v_upd = v_upd[:-2]

        # update length
        v_len = len(upd_lst)
        v_len = str("%s, "* v_len)[:-2]

        return q_lst, v_upd, v_len


    # update query 작성
    def make_upsert_q(self, tb_nm:str, upd_lst:list):
        a1, a2, a3 = self.make_qv(upd_lst)

        upsert_q_final = f"""INSERT INTO {tb_nm} ({a1}) VALUES ({a3}) ON DUPLICATE KEY UPDATE {a2}"""
        upsert_q_final = upsert_q_final.replace("\n", "")  # 없어도 문제는 안되는 듯

        return upsert_q_final


CQ = Create_Queries()