You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 22服务器上LangChain无法读取MySQL表问题求助

解决LangChain连接MySQL无法读取表的问题

问题描述

运行LangChain和MySQL的Ubuntu 22服务器中,LangChain能正常连接MySQL但无法读取任何表,db.get_usable_table_names()返回空列表;但直接使用mysql.connector连接可正常查询表数据。

LangChain测试代码:

from langchain_community.utilities.sql_database import SQLDatabase
import pyodbc

db = SQLDatabase.from_uri('mysql+mysqlconnector://root:abcd1234@localhost:3306/test?auth_plugin=mysql_native_password')

print(db.dialect) # 输出: mysql
print(db.get_usable_table_names()) # 输出空列表: []

常规连接测试代码(可正常运行):

import mysql.connector

DB_HOST = 'localhost'
DB_PASS = 'abcd1234'
DB_NAME = 'test'
DB_USER = 'root'

def db_select(sql):
    
    con = mysql.connector.connect(host = DB_HOST, 
                                  user = DB_USER, 
                                  passwd = DB_PASS, 
                                  db = DB_NAME,
                                  auth_plugin = 'mysql_native_password')
    cursor = con.cursor(dictionary=True)
    cursor.execute(sql)
    result = cursor.fetchall()
    con.close()
    return result

a = db_select('select * from test_table limit 2')
for item in a:
    print(item) # 此代码可正常运行

解决建议

  • 检查LangChain SQLDatabase初始化参数
    默认情况下SQLDatabase可能过滤系统表,或需显式指定要包含的表。可尝试添加include_tables参数指定目标表,或清空ignore_tables关闭过滤:

    # 指定要包含的表
    db = SQLDatabase.from_uri(
        'mysql+mysqlconnector://root:abcd1234@localhost:3306/test?auth_plugin=mysql_native_password',
        include_tables=['test_table']
    )
    # 或者关闭表过滤
    db = SQLDatabase.from_uri(
        'mysql+mysqlconnector://root:abcd1234@localhost:3306/test?auth_plugin=mysql_native_password',
        ignore_tables=[]
    )
    

    也可调用db.get_table_names()(无usable前缀)查看所有表,确认LangChain是否能识别到表。

  • 验证数据库用户元数据权限
    尽管mysql.connector能正常访问,但LangChain依赖的SQLAlchemy可能需要额外元数据权限。确保root用户拥有test数据库的SHOW TABLES、DESCRIBE等权限,执行以下SQL验证:

    SHOW GRANTS FOR 'root'@'localhost';
    

    若缺少权限,补充对应权限:

    GRANT SELECT, SHOW TABLES ON test.* TO 'root'@'localhost';
    FLUSH PRIVILEGES;
    
  • 排查SQLAlchemy与驱动兼容性
    LangChain依赖SQLAlchemy,版本不兼容可能导致问题。先查看当前安装版本:

    pip show sqlalchemy mysql-connector-python
    

    尝试更新到兼容版本(如SQLAlchemy 2.x搭配mysql-connector-python 8.x):

    pip install --upgrade sqlalchemy mysql-connector-python
    
  • 直接用SQLAlchemy测试元数据读取
    绕过LangChain封装,直接用SQLAlchemy测试,定位问题层级:

    from sqlalchemy import create_engine, MetaData
    
    engine = create_engine('mysql+mysqlconnector://root:abcd1234@localhost:3306/test?auth_plugin=mysql_native_password')
    metadata = MetaData()
    metadata.reflect(bind=engine)
    print(metadata.tables.keys()) # 查看所有表名
    

    若输出为空,问题出在SQLAlchemy或驱动层;若有表名,说明LangChain的get_usable_table_names存在过滤逻辑。

内容的提问来源于stack exchange,提问作者Tianyun Ling

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 21:22:20