ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python]DB 커넥터를 활용한 데이터베이스 연동하기
    Data Analysis/Python 2024. 3. 25. 21:26

    Table of Contents

    1. Introduction
    2. 파이썬에서 DB연동
    3. ConnectorX
    4. Reference

     

    Introduction

     데이터를 다루는 사람이라면 과거에는 csv 파일이나 txt 파일을 활용해서 사용하는 경우가 대다수였을 것이다. 4차 산업혁명과 함께 가장 많이 언급된 단어 중 하나는 디지털 전환(Digital Transformation)일 것이다. 디지털 전환은 디지털 기술을 다양한 분야에 적용하여 기존의 전통적인 산업에서의 디지털화(Digitization)를 촉진시키는 것을 의미한다. 단순 IT기술의 발달이 아닌 하드웨어와 소프트웨어의 고성장이 이뤄낸 결과물인데, 엔비디아나 AMD의 그래픽카드 성능 개선이 기존의 연산을 폭발적으로 개선해왔던 것 또한 디지털 전환의 중요한 매개체이다. 이에 따라 데이터의 생산량 뿐만 아니라 대용량 데이터를 처리하기 위한 데이터 관리 체계가 자리 잡게 되면서 데이터 분석을 진행하는 사람들에게 데이터베이스로부터 직접 수집하여 분석하는 것을 기대하는 곳이 상당히 많아졌다.

     

    파이썬에서  DB 연동

     데이터베이스 연동을 위해 사용할 수 있는 라이브러리 중 하나는 바로 connectorx이다. 사용하는 방법은 해당 라이브러리를 호출하고 read_sql() 함수를 이용해서 데이터를 불러 올 수 있다. 이때, 타겟이 되는 데이터베이스에 대한 정보를 알고 있고, 본인이 필요로 하는 데이터를 뽑아내기 위한 SQL문을 이해할 필요가 있다. 이와 관련해서 따로 정리했던 내용이 있다.

     

    [SQL] 날짜 함수를 이용하여 특정 기간 데이터 조회하기

    Table of Contents Introduction MySQL 날짜 함수 날짜 함수를 활용한 데이터 조회 Reference Introduction 데이터베이스에서 데이터를 조회하고 이를 분석하고자 하는 일련의 과정이 과거에 비해 자연스러워짐

    jaydata.tistory.com

    관련 내용을 참조 했다면, 특정 날짜에 데이터를 조회할 수 있을 것이라고 생각이 든다.

     

    ConnectorX

    그 많은 파이썬 라이브러리 중에서 왜  connectorX인가? AWS에서 각 라이브러리 별 read_sql() 함수를 비교한 결과 ConnectorX가 Modin, Pandas, Dask, Turbodbc와 비교했을 때 월등한 성능을 보여주는 것을 확인할 수 있었다. 추출하는데 걸리는 시간이 가장 작았으며, 메모리 사용량이 가장 적었다는 점에서 월등한 성능을 보여준다

     

    ConnectorX에서 지원하는 데이터베이스는 Postrgres, Mysql, MariaDB, Sqlite, Redshift, Clickhouse, SQL Server, Azure SQL Database, Oracle, Big Query, ODBC 등을 지원한다는 점

     

    참고 소스
    import requests
    import connectorx as cx
    import time
    import random
    import os
    from dotenv import load_dotenv, find_dotenv

    # .env파일 위치 찾고 불러오기
    dotenv_file = find_dotenv()
    load_dotenv(dotenv_file)

    # API 테스트 URL
    domain = os.environ['domain']
    url_str = os.environ['str']
    url_end = os.environ['end']
    date = "2024-03-24"

    # 고객명단 조회
    sql = f"""
    select ID
      from ti_client
    """

    #DB커넥션
    df = cx.read_sql(f"mysql://{os.environ['user']}:{os.environ['pw']}@{os.environ['host']}:{os.environ['port']}/{os.environ['db']}",sql)
    filtered_df = df[df['ID'].str.contains("ac.")]

    # Call 결과
    index = []

    for index, row in filtered_df.iterrows():
        ID = row['ID']
        url = domain + url_str +str(ID) + url_end
        print(requests.get(url))
        if((index + 1) % 10 == 0):
            print(index+1)
        delay = random.randint(0, 3)
        time.sleep(delay)
        print(ID)

     

    Reference

    SFU-DB, "ConnectorX" , https://sfu-db.github.io/connector-x/intro.html

    댓글

Designed by Tistory.