Langchain连接Azure SQL Database失败,报HY104错误求解决
解决方案:Azure SQL Database连接Langchain SQLDatabase时HY104错误处理
问题原因
该错误源于SQLAlchemy绑定参数到NVARCHAR(max)类型时,ODBC Driver 17 for SQL Server对精度值的处理存在兼容性问题,具体触发在Langchain的SQLDatabase初始化查询元数据阶段。
可行解决方案
1. 给SQLAlchemy引擎添加fast_executemany=True参数
启用该参数可修复参数绑定的精度问题,修改引擎创建代码:
from sqlalchemy import create_engine import os driver = '{ODBC Driver 17 for SQL Server}' odbc_str = 'mssql+pyodbc:///?odbc_connect=' \ 'Driver='+driver+ \ ';Server=tcp:' + os.getenv("SQL_SERVER")+'.database.windows.net;PORT=1433' + \ ';DATABASE=' + os.getenv("SQL_DB") + \ ';Uid=' + os.getenv("SQL_USERNAME")+ \ ';Pwd=' + os.getenv("SQL_PWD") + \ ';Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;' # 添加fast_executemany=True参数 db_engine = create_engine(odbc_str, fast_executemany=True)
2. 手动指定SQLDatabase要加载的表
跳过默认的全量元数据查询,直接指定需要操作的表,避免触发错误SQL语句:
from langchain.sql_database import SQLDatabase # 替换为你实际需要的表名列表 target_tables = ["table1", "table2", "table3"] db = SQLDatabase(db_engine, include_tables=target_tables)
3. 升级依赖包到最新版本
旧版本的pyodbc、SQLAlchemy或Langchain可能存在兼容性bug,执行以下命令升级:
pip install --upgrade pyodbc sqlalchemy langchain
4. 切换到ODBC Driver 18 for SQL Server
若上述方法无效,尝试更换为最新版ODBC驱动:
driver = '{ODBC Driver 18 for SQL Server}' # 其余连接字符串保持不变
内容的提问来源于stack exchange,提问作者Lisa
相关产品推荐
相关产品推荐

