SQLDatabaseChain 사용법MySQL 데이터베이스와 LangChain의 SQLDatabaseChain 을 연동하여 자연어로 SQL 쿼리를 실행하는 방법을 단계별로 설명합니다.
우선, 필요한 Python 라이브러리를 설치해야 합니다.
pip install langchain openai sqlalchemy pymysql
langchain : LangChain 프레임워크openai : OpenAI API (LLM 사용)sqlalchemy : 데이터베이스 ORMpymysql : MySQL과 연결을 위한 드라이버MySQL을 실행하고 사용할 데이터베이스를 생성해야 합니다.
CREATE DATABASE mydatabase;
USE mydatabase;
CREATE TABLE sales_data (
id INT AUTO_INCREMENT PRIMARY KEY,
product_name VARCHAR(255),
sales INT,
sale_date DATE
);
INSERT INTO sales_data (product_name, sales, sale_date) VALUES
('아이폰 15', 10000, '2025-02-01'),
('갤럭시 S24', 8000, '2025-02-02'),
('맥북 프로', 5000, '2025-02-03');
이렇게 하면 sales_data 테이블이 생성되고 샘플 데이터가 입력됩니다.
이제 Python 코드에서 MySQL과 연결해 봅니다.
from langchain.chains import SQLDatabaseChain
from langchain.llms import OpenAI
from langchain.sql_database import SQLDatabase
from sqlalchemy import create_engine
import os
# OpenAI API 키 설정
os.environ["OPENAI_API_KEY"] = "your-api-key"
# MySQL 데이터베이스 연결
MYSQL_USER = "your_user"
MYSQL_PASSWORD = "your_password"
MYSQL_HOST = "localhost" # 원격일 경우 서버 IP 입력
MYSQL_PORT = "3306"
MYSQL_DB = "mydatabase"
# MySQL 연결 엔진 생성
engine = create_engine(f"mysql+pymysql://{MYSQL_USER}:{MYSQL_PASSWORD}@{MYSQL_HOST}:{MYSQL_PORT}/{MYSQL_DB}")
# SQLDatabase 객체 생성
db = SQLDatabase(engine)
# LLM 모델 초기화
llm = OpenAI(temperature=0) # 일관된 결과를 위해 temperature=0 설정
# SQLDatabaseChain 생성
db_chain = SQLDatabaseChain.from_llm(llm, db, verbose=True)
# 자연어로 질의 실행
question = "지난 달 가장 많이 판매된 제품은?"
result = db_chain.run(question)
print("🔹 결과:", result)
코드를 실행하면, LangChain이 아래와 같은 SQL을 자동으로 생성할 것입니다.
SELECT product_name, SUM(sales)
FROM sales_data
WHERE sale_date >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH)
GROUP BY product_name
ORDER BY SUM(sales) DESC
LIMIT 1;
> Entering new SQLDatabaseChain chain...
SQL Query:
SELECT product_name, SUM(sales)
FROM sales_data
WHERE sale_date >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH)
GROUP BY product_name
ORDER BY SUM(sales) DESC
LIMIT 1;
> Finished chain.
🔹 결과: 지난 달 가장 많이 판매된 제품은 '아이폰 15'이며, 총 10,000개 판매되었습니다.
📌 특징:
✅ 장점:
1. 자동화 → SQL을 생성하고 실행까지 자동으로 진행됨.
verbose=True를 설정하면 실행된 SQL을 확인할 수 있음. ❌ 단점:
1. 초기 설정 필요 → SQLAlchemy 엔진과 데이터베이스 연결 설정이 필요함.
create_engine()을 사용하여 DB 연결해야 함📌 특징:
✅ 장점:
1. 설정이 간단함 → 데이터베이스 연결 없이 SQL 쿼리만 생성 가능.
❌ 단점:
1. 수동 실행 필요 → 생성된 SQL을 직접 실행해야 하는 번거로움이 있음.
| 사용 목적 | SQLDatabaseChain | 프롬프트 기반 SQL 변환 |
|---|---|---|
| SQL 자동 실행이 필요한 경우 | ✅ 추천 | ❌ 비추천 |
| 데이터베이스 연결 없이 SQL만 생성 | ❌ 비추천 | ✅ 추천 |
| 빠른 설정이 필요한 경우 | ❌ 비추천 | ✅ 추천 |
| 보안이 중요한 경우 | ❌ 신중한 설정 필요 | ✅ 추천 (수동 검토 가능) |
| 대형 프로젝트에서 데이터 분석 | ✅ 추천 | ❌ 비추천 |