如何将LangChain数据库代理与SQL Server进行连接?
LangChain连接SQL Server数据库的正确方式及错误修复
问题描述
需要将LangChain数据库代理与SQL Server数据库连接实现数据访问,但官方文档仅提供SQLite连接示例,替换连接字符串后出现以下错误:
sqlalchemy.exc.InterfaceError: (pyodbc.InterfaceError) ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')
正确连接方式
LangChain的SQLDatabase.from_uri兼容SQLAlchemy的SQL Server连接规范,按以下步骤配置即可:
1. 安装必需依赖
先确保安装连接所需的Python包:
pip install pyodbc sqlalchemy langchain openai
2. 构建正确的连接URI
根据身份验证方式选择对应格式,替换占位符为你的实际信息:
- SQL身份验证(账号密码登录):
from langchain.sql_database import SQLDatabase server = "你的服务器名称/实例名" database = "目标数据库名" username = "数据库账号" password = "数据库密码" driver = "ODBC+Driver+17+for+SQL+Server" # 推荐使用17及以上版本驱动 db_uri = f"mssql+pyodbc://{username}:{password}@{server}/{database}?driver={driver}" db = SQLDatabase.from_uri(db_uri)
- Windows身份验证(信任连接):
db_uri = f"mssql+pyodbc://{server}/{database}?driver={driver}&trusted_connection=yes" db = SQLDatabase.from_uri(db_uri)
3. 完整代理初始化代码
from langchain.agents import create_sql_agent, AgentExecutor from langchain.agents.agent_toolkits import SQLDatabaseToolkit from langchain.agents.agent_types import AgentType from langchain.chat_models import ChatOpenAI # 上述db初始化代码 toolkit = SQLDatabaseToolkit(db=db, llm=ChatOpenAI(temperature=0)) agent_executor = create_sql_agent( llm=ChatOpenAI(temperature=0, model="gpt-3.5-turbo"), toolkit=toolkit, verbose=True, agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION )
错误修复(针对IM002错误)
- 检查ODBC驱动安装情况:
打开Windows ODBC数据源管理器(64位),确认存在ODBC Driver 17 for SQL Server或更高版本驱动,无则安装对应驱动。 - 修正连接字符串格式:
原代码中driver{driver}缺少等号,正确格式为driver={driver},且所有占位符需替换为实际值,不能保留{}符号。 - 验证访问权限:
SQL身份验证需确认账号密码正确且有目标数据库访问权限;Windows身份验证需确保运行代码的用户拥有数据库访问权限。 - 确认服务器可达性:
检查SQL Server实例是否允许远程连接,防火墙是否开放默认端口1433。
内容的提问来源于stack exchange,提问作者Mutasim Al-Mualimi
相关产品推荐
相关产品推荐

