[Python/MSSQL] pymssql MSSQL DB Dataframe으로 읽어오기 (+한글 깨짐 해결법)

안녕하세요. 오늘은 pymmsql 패키지를 통해 MSSQL DB를 파이썬으로 쉽게 읽어 DataFrame으로 변환하는 방법에 대해 알아보려고 합니다.

MSSQL DB 연결하기

먼저 DATABASE, IP 등의 정보를 통해 DB에 연결해 주어야 해요. 서버와 DB명, username과 password를 입력한 뒤, 연결해 줍니다.

import pandas as pd
import pymssql

server = 'INSERT_YOUR_SERVER'
database = 'INSERT_YOUR_DATABASE'
username = 'INSERT_YOUR_USERNAME' 
password = 'INSERT_YOUR_PASSWORD'
cnxn = pymssql.connect(server, username, password, database)

DataFrame으로 테이블 읽어오기

원하는 테이블을 읽어서 DataFrame으로 저장하는 방법입니다.
query에 원하는 sql 쿼리문을 작성해주시고, pandas의 .read_sql()을 쓰면 됩니다.

query = """select top 10 * from test"""
result = pd.read_sql(query, cnxn)
result.haed()

mssql DB Dataframe으로 읽어온 결과

짜잔 DB의 test 테이블이 잘 읽어와 졌어요.

한글 깨짐 해결법

혹시, 한글 칼럼이 깨져서 읽어오시는 분들은 DB와 connect할 때 “charset='UTF8'” 파라미터를 추가해주세요.

cnxn = pymssql.connect(server, username, password, database, charset = 'UTF8')

DB 연결 해제하기

작업이 끝났을 때, 반드시 연결을 해제해야 합니다. cnxn.close()를 사용하여 데이터베이스 연결을 해제할 수 있습니다.

cnxn.close()

이렇게 하면 MSSQL 데이터베이스와의 연결이 완전히 종료됩니다. 데이터를 처리한 후에는 항상 연결을 닫아 메모리 누수를 방지하는 것이 좋아요.

SQLAlchemy 활용하기

또 다른 유용한 방법 중 하나로는 SQLAlchemy를 사용하는 것이 있어요. SQLAlchemy는 여러 데이터베이스에 대한 통합된 인터페이스를 제공하며, ORM(Object-Relational Mapping)을 지원합니다.

ORM이란,

“Object-Relational Mapping”의 약자로, 객체와 관계형 데이터베이스 간의 매핑을 의미한다. 이는 객체 지향 프로그래밍 언어에서 사용되는 객체 모델과, 관계형 데이터베이스에서 사용되는 테이블 형식의 데이터 모델 간에 발생하는 불일치를 해결하기 위한 기술이다.
from sqlalchemy import create_engine 

# 연결 문자열 생성 
connection_string = f'mssql+pymssql://{username}:{password}@{server}/{database}' 

# SQLAlchemy 엔진 생성 
engine = create_engine(connection_string) 

# DataFrame으로 데이터 읽어오기 
result = pd.read_sql(query, engine)

SQLAlchemy를 사용함으로써 더 유연하고 강력한 데이터베이스 연결을 구현할 수 있다고 합니다.

이상으로 pymssql을 사용한 MSSQL 데이터를 DataFrame으로 읽어오는 방법과 몇 가지의 추가 적인 정보들이었습니다. 데이터 분석에 많은 도움이 되기를 바랄게요❤️

Leave a Comment