Programming

📡 Python으로 MSSQL 저장 프로시저 실행하기 (파라미터 전달까지 완벽 정리!)

quantoasis 2025. 3. 28. 13:45
반응형

Python을 사용해서 MSSQL에 저장된 프로시저(Stored Procedure) 를 호출하고,
파라미터를 안전하게 전달하는 방법을 실습 중심으로 알아보겠습니다.

이 포스트 하나로, 기초부터 실전 예제까지 완벽히 정리해드릴게요! ✅


✅ 저장 프로시저란?

저장 프로시저(Stored Procedure) 는 미리 정의된 SQL 쿼리 블록을 데이터베이스에 저장해놓고,
필요할 때마다 호출해서 실행할 수 있는 일종의 “미리 짜둔 함수”입니다.

예시:

EXEC GetUserByAge @MinAge = 30

우리는 이걸 Python 코드로 자동화하는 것이 목표입니다.


🛠 1. Python에서 MSSQL 연결하기

📦 설치해야 할 라이브러리

pip install pyodbc

pyodbc는 Python에서 ODBC 드라이버를 통해 SQL Server에 접속할 수 있도록 해주는 라이브러리입니다.


🔗 MSSQL 연결 코드

import pyodbc

conn = pyodbc.connect(
    "DRIVER={ODBC Driver 17 for SQL Server};"
    "SERVER=127.0.0.1;"  # 또는 '서버이름\인스턴스이름'
    "DATABASE=TestDB;"
    "UID=sa;"
    "PWD=your_password"
)
cursor = conn.cursor()

💡 비밀번호를 코드에 직접 넣지 말고 .env 파일로 분리해서 관리하는 걸 추천드려요!


📋 2. 저장 프로시저 예제 (MSSQL 쪽)

아래는 나이(@MinAge)를 기준으로 사용자를 조회하는 간단한 프로시저입니다.

CREATE PROCEDURE GetUserByAge
    @MinAge INT
AS
BEGIN
    SELECT * FROM Users WHERE Age >= @MinAge
END

이제 Python에서 이 프로시저를 호출해보겠습니다!


▶️ 3. Python에서 프로시저 실행 + 파라미터 전달하기

min_age = 30

cursor.execute("EXEC GetUserByAge ?", min_age)
rows = cursor.fetchall()

for row in rows:
    print(row)

🔍 포인트 설명:

  • ?는 파라미터 자리 표시자입니다.
  • min_age는 자동으로 바인딩되어 SQL Injection 걱정 없이 안전합니다.
  • fetchall()로 결과를 전부 가져옵니다.

🧾 4. 결과를 pandas DataFrame으로 받기

데이터 분석에 많이 쓰이는 pandas로 받아보겠습니다.

import pandas as pd

columns = [column[0] for column in cursor.description]
df = pd.DataFrame(rows, columns=columns)
print(df.head())

cursor.description을 이용하면 컬럼명을 추출할 수 있습니다.


🧪 5. OUTPUT 파라미터가 있는 프로시저 실행하기

아래는 사용자 정보를 추가하고 새로 삽입된 ID 값을 반환하는 프로시저입니다.

CREATE PROCEDURE AddUserAndReturnID
    @Name NVARCHAR(100),
    @Age INT,
    @NewID INT OUTPUT
AS
BEGIN
    INSERT INTO Users(Name, Age)
    VALUES(@Name, @Age)

    SET @NewID = SCOPE_IDENTITY()
END

🔄 Python에서 OUTPUT 받기

name = 'Alice'
age = 25

cursor.execute("""
    DECLARE @OutputID INT;
    EXEC AddUserAndReturnID ?, ?, @OutputID OUTPUT;
    SELECT @OutputID;
""", name, age)

new_id = cursor.fetchone()[0]
print("새로 추가된 사용자 ID:", new_id)
conn.commit()

⚠️ INSERT/UPDATE 같은 작업은 conn.commit() 꼭 해줘야 반영됩니다.


🧼 6. 마무리 정리

항목 설명
pyodbc.connect(...) MSSQL 연결
cursor.execute("EXEC 프로시저 ?", 파라미터) 저장 프로시저 호출
fetchall(), fetchone() 결과 가져오기
conn.commit() 데이터 수정 후 저장 필수
OUTPUT 파라미터 DECLARE, SELECT 조합 사용

💡 실무 팁

  • 프로시저 파라미터가 많다면, dict로 만들어 순서대로 넘겨주는 구조화된 코드도 유용합니다.
  • 매일 정해진 시간에 자동으로 실행하고 싶다면 schedule이나 APScheduler 라이브러리로 확장 가능해요.
  • 보안상 연결 정보는 .env 또는 config.json 으로 관리하세요.

🎯 마무리

Python과 MSSQL을 함께 활용하면

  • 반복되는 데이터 처리 자동화
  • 실시간 보고서 생성
  • 사용자 맞춤 데이터 제공

등 다양한 비즈니스 자동화 시나리오를 쉽게 구현할 수 있습니다.
이번 기회에 프로시저 실행 로직을 템플릿으로 만들어두면 정말 유용하게 쓸 수 있어요!


반응형