반응형
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을 함께 활용하면
- 반복되는 데이터 처리 자동화
- 실시간 보고서 생성
- 사용자 맞춤 데이터 제공
등 다양한 비즈니스 자동화 시나리오를 쉽게 구현할 수 있습니다.
이번 기회에 프로시저 실행 로직을 템플릿으로 만들어두면 정말 유용하게 쓸 수 있어요!
반응형
'Programming' 카테고리의 다른 글
🧠 진짜 쉽게 배우는 Python 함수형 프로그래밍: lambda, map, filter, reduce (0) | 2025.03.31 |
---|---|
📬 Python으로 텔레그램에 알림 보내는 방법 (봇 API 활용) (1) | 2025.03.27 |
🔎 Python에서 조건별로 MSSQL 쿼리 동적 생성하기 (f-string과 SQL Injection 방지법) (0) | 2025.03.26 |
📦Python 가상환경(venv) 사용법 + `requirements.txt` 완전정복 (0) | 2025.03.25 |
🔁 MSSQL에서 반복문 처리하기: WHILE vs CURSOR 기초 정리 (0) | 2025.03.24 |