반응형
파이썬을 사용해 MSSQL 데이터베이스에서 데이터를 추출(Extract)하여 CSV 파일로 적재(Load)하는, 간단한 ETL 형태의 소스 코드를 보여드리겠습니다.
여기서는 가장 널리 사용되는 라이브러리인 pandas와 pyodbc를 사용하겠습니다.
- pyodbc: 데이터베이스에 연결하기 위한 라이브러리 (ODBC 드라이버 필요)
- pandas: 데이터를 다루고(Transform), CSV로 저장(Load)하는 데 매우 편리한 라이브_러리
1단계: 필요 라이브러리 설치
터미널이나 명령 프롬프트에서 아래 명령어를 실행하여 필요한 라이브러리를 설치합니다.
Bash
pip install pandas pyodbc
2단계: ODBC 드라이버 확인 및 설치 (중요!)
pyodbc는 컴퓨터에 설치된 ODBC 드라이버를 통해 데이터베이스와 통신합니다. MSSQL에 연결하려면 Microsoft에서 제공하는 ODBC 드라이버가 필요합니다.
- Windows: 보통 최신 버전의 Windows에는 드라이버가 내장되어 있거나 SQL Server Management Studio(SSMS)를 설치할 때 함께 설치됩니다. 만약 없다면 아래 링크에서 설치하세요.
- macOS/Linux: 별도로 드라이버를 설치해야 합니다.
Microsoft ODBC Driver for SQL Server 다운로드 페이지
설치 후, 사용 가능한 드라이버 이름을 확인해야 합니다. 일반적인 이름은 다음과 같습니다.
- ODBC Driver 17 for SQL Server (권장)
- ODBC Driver 18 for SQL Server
- SQL Server Native Client 11.0
- SQL Server
3단계: 파이썬 코드 작성
아래는 전체 프로세스를 담은 파이썬 스크립트입니다. 설정 부분만 자신의 환경에 맞게 수정하여 사용하시면 됩니다.
기본 예제 코드
이 코드는 가장 간단한 형태로, 연결-추출-저장 과정을 보여줍니다.
Python
import pandas as pd
import pyodbc
import sys
# --- 1. 설정 정보 (사용자 환경에 맞게 수정) ---
DB_CONFIG = {
# 사용 가능한 ODBC 드라이버 이름을 정확히 입력해야 합니다.
'driver': '{ODBC Driver 17 for SQL Server}',
'server': 'YOUR_SERVER_ADDRESS', # 예: 'localhost', '192.168.0.100', 'server.database.windows.net'
'database': 'YOUR_DATABASE_NAME',
'username': 'YOUR_USERNAME',
'password': 'YOUR_PASSWORD',
# 윈도우 인증(Windows Authentication)을 사용할 경우 아래 주석을 해제하고 username/password는 주석 처리
# 'trusted_connection': 'yes',
}
# 추출할 데이터를 정의하는 SQL 쿼리
SQL_QUERY = """
SELECT
column1,
column2,
column3
FROM
YourTableName
WHERE
some_condition = 'some_value';
"""
# 저장할 CSV 파일 경로
OUTPUT_CSV_PATH = 'output_data.csv'
# --- 2. ETL 프로세스 실행 ---
def run_etl():
"""MSSQL에서 데이터를 추출하여 CSV로 저장하는 메인 함수"""
connection = None # 초기화
try:
# --- E (Extract): 데이터 추출 ---
print("1. 데이터베이스에 연결 중...")
# 윈도우 인증 여부에 따라 연결 문자열 생성
if 'trusted_connection' in DB_CONFIG:
conn_str = f"DRIVER={DB_CONFIG['driver']};SERVER={DB_CONFIG['server']};DATABASE={DB_CONFIG['database']};TRUSTED_CONNECTION={DB_CONFIG['trusted_connection']}"
else:
conn_str = f"DRIVER={DB_CONFIG['driver']};SERVER={DB_CONFIG['server']};DATABASE={DB_CONFIG['database']};UID={DB_CONFIG['username']};PWD={DB_CONFIG['password']}"
connection = pyodbc.connect(conn_str)
print(" 연결 성공.")
print(f"2. 쿼리 실행 및 데이터 추출 중...")
# pandas의 read_sql 함수를 사용하면 쿼리 결과를 바로 DataFrame으로 가져올 수 있어 매우 편리합니다.
df = pd.read_sql(SQL_QUERY, connection)
print(f" 총 {len(df)}개의 행을 추출했습니다.")
# --- T (Transform): 데이터 변환 (이 예제에서는 간단한 변환은 생략) ---
# 이 단계에서 데이터 클렌징, 새로운 컬럼 추가, 데이터 타입 변경 등의 작업을 수행할 수 있습니다.
# 예: df['new_column'] = df['column1'] * 1.1
print("3. 데이터 변환 단계 (이 예제에서는 생략됨).")
# --- L (Load): 데이터 적재 ---
print(f"4. CSV 파일로 저장 중: {OUTPUT_CSV_PATH}")
# index=False: DataFrame의 인덱스(0, 1, 2...)는 CSV에 저장하지 않음
# encoding='utf-8-sig': 한글 깨짐 방지. Excel에서 열 때 BOM(Byte Order Mark)이 있어 깨지지 않음
df.to_csv(OUTPUT_CSV_PATH, index=False, encoding='utf-8-sig')
print(" 저장 완료!")
except Exception as e:
print(f"오류가 발생했습니다: {e}", file=sys.stderr)
finally:
# --- 작업 완료 후 연결 종료 ---
if connection:
connection.close()
print("5. 데이터베이스 연결을 해제했습니다.")
# --- 스크립트 실행 ---
if __name__ == "__main__":
run_etl()
코드 설명
- 설정 정보 (DB_CONFIG, SQL_QUERY, OUTPUT_CSV_PATH)
- ETL 작업에 필요한 모든 설정(DB 접속 정보, 쿼리, 결과 파일 경로)을 코드 상단에 모아두어 관리하기 쉽게 만들었습니다.
- DB_CONFIG 딕셔너리에 자신의 데이터베이스 환경에 맞는 정보를 입력합니다.
- 윈도우 인증을 사용한다면 username, password를 주석 처리하고 'trusted_connection': 'yes'를 활성화하세요.
- E: Extract (추출)
- pyodbc.connect() 함수를 사용하여 MSSQL 데이터베이스에 연결합니다.
- pd.read_sql(SQL_QUERY, connection)는 가장 핵심적인 부분입니다. 지정된 SQL_QUERY를 실행하고 그 결과를 pandas DataFrame이라는 표 형태의 데이터 구조로 한 번에 가져옵니다.
- T: Transform (변환)
- 이 예제에서는 특별한 변환 작업을 하지 않았지만, 실제 ETL에서는 이 단계가 매우 중요합니다.
- 추출된 DataFrame (df)을 가공하는 코드를 이 위치에 추가할 수 있습니다. (예: 특정 컬럼의 값 바꾸기, 날짜 형식 변경, 파생 변수 생성 등)
- L: Load (적재)
- df.to_csv(OUTPUT_CSV_PATH, ...) 함수를 사용하여 DataFrame을 CSV 파일로 저장합니다.
- index=False: CSV 파일에 불필요한 인덱스 번호가 저장되는 것을 방지합니다.
- encoding='utf-8-sig': 한글 데이터가 있다면 필수적입니다. 이 인코딩은 Excel이 UTF-8 파일을 올바르게 인식하도록 도와주어 한글 깨짐을 방지합니다.
- 예외 처리 및 연결 종료 (try...except...finally)
- try...except 블록은 작업 중 발생할 수 있는 오류(DB 연결 실패, 쿼리 오류 등)를 잡아내어 프로그램을 비정상적으로 종료시키지 않고 원인을 출력해줍니다.
- finally 블록은 try 블록의 성공/실패 여부와 관계없이 항상 실행됩니다. 데이터베이스 연결을 확실하게 닫아주기 위해 사용하며, 리소스를 안전하게 반환하는 좋은 습관입니다.
실행 방법
- 위 코드를 mssql_to_csv.py 와 같은 이름으로 저장합니다.
- 코드 상단의 설정 정보 부분을 자신의 환경에 맞게 정확히 수정합니다.
- 터미널에서 아래 명령어로 스크립트를 실행합니다.
- Bash
python mssql_to_csv.py
실행이 성공적으로 완료되면 스크립트가 있는 폴더에 output_data.csv 파일이 생성된 것을 확인할 수 있습니다.
728x90
반응형
'데이터' 카테고리의 다른 글
| BI개발 SSAS 모델: 파티션 vs. 인메모리 타뷸러 모델 처리방법 차이점 (0) | 2025.09.04 |
|---|---|
| 데이터 분석 OALP MSBI SSAS와 타뷸러 모델 개방방법 차이를 알아보자 (0) | 2025.09.03 |
| MSSQL LEVEL쿼리 계층형 쿼리 이해하기 (0) | 2025.08.19 |
| ETL에 강력한 파이썬, 파이썬으로 ETL구현하는 방법 (0) | 2025.08.18 |
| 파이썬 독학, 이것만은 알고 시작하세요! (초보자 필수 암기 리스트 & 핵심 개념 총정리) (0) | 2025.08.13 |
댓글