Data Analysis/Python for DA

[pymysql] SQL과 Python 연결

Jiyeon's Desk 2025. 3. 19. 13:10

1. 

_db =pymysql.connect(
    host = os.getenv('host'),
    port = int(os.getenv('port')),
    user= os.getenv('user'),
    db = os.getenv('db_name')
)

 

host : MySQL 서버가 실행 중인 컴퓨터 주소(IP 또는 도메인)

port : MySQL이 사용하는 네트워크 포트 (기본값: 3306)

user :MySQL에 접속할 때 사용할 사용자 계정 (예: root, admin 등)

charset : 문자 인코딩 방식 (한글 지원을 위해 utf8mb4 권장)

 

 

2. cursor

cursor = _db.cursor(pymysql.cursors.DictCursor)
cursor.execute(select_sql)

 

MySQL에서 SQL 문을 실행하고 결과를 가져오는 역할을 하는 객체

커서를 생성하고나서 sql 쿼리 실행할 수 있음

대표적인 커서 메서드 :  cursor.execute()/cursor.fetchall()/ corsor.close()

 

 

3. 커서 생성 방법 차이

 

1️⃣ 기본커서 : cursor = db.cursor()

-> 튜플 형태로 데이터를 반환, 열 이름 x

-> ex. [(1, 'Alice', 25), (2, 'Bob', 30)] 일때 result[0][1]으로 Alice 가져올 수 있음

2️⃣ DicCursor : cursor = db.cursor(pymysql.cursors.DictCursor)

-> 딕셔너리 형태로 데이터 반환, 열 이름 포함

 

 

4. * (가변 인자)

def select_query(_sql,*_val):
    cursor.execute(_sql,_val)
    sql_data = cursor.fetchall()
    result = pd.DataFrame(sql_data)
    return result
    
def utility_query(_sql, inplace = False):
    cursor.execute(_sql)
    if inplace:
        _db.commit()
    return "Query ok"

 

이 함수에서 인자로 *_val 을 받으면서 execute을 실행할때는 _val 을 사용해도 되는 이유

: execute()는 튜플을 기대하므로 

val를 리스트로 받으면 튜플로 변환해야 함 -> cursor.execute(_sql, tuple(values))