직접짠꿀코드/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()