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

如何让LangChain SQLDatabaseChain识别内存中SQLite数据库的表?

解决LangChain SQLDatabaseChain识别SQLite内存表的问题

问题根源

SQLite的:memory:数据库是每个连接独立的,你用sqlite3.connect(':memory:')创建的内存库,和SQLDatabase.from_uri("sqlite:///:memory:")创建的是两个完全隔离的内存实例,后者没有你之前填充的my_table;同时你代码里还犯了表名拼写错误(把my_table写成了mytable),这两个原因共同导致了报错。

两种可行解决方案

  • 方案一:复用已有的sqlite3连接
    直接把你已经创建并填充数据的sqlite3连接传给SQLDatabase,不需要重新通过URI创建新连接,这样就能共享同一个内存数据库实例:

    # 你已有的sqlite3连接db(已填充my_table)
    from langchain_community.utilities import SQLDatabase
    from langchain.chains import SQLDatabaseChain
    
    # 用现有连接初始化SQLDatabase
    langchain_db = SQLDatabase(db)
    # 创建SQLDatabaseChain
    db_chain = SQLDatabaseChain.from_llm(llm, langchain_db)
    
  • 方案二:使用共享内存数据库URI
    如果需要通过URI方式连接,改用SQLite的共享内存模式,让同一个进程内的多个连接共享同一个内存数据库:

    # 第一步创建连接时使用共享内存URI
    db = sqlite3.connect('file::memory:?cache=shared', uri=True)
    # 这里执行Pandas填充my_table的操作...
    
    # 初始化SQLDatabase时用同一个URI,注意表名拼写正确
    langchain_db = SQLDatabase.from_uri(
        "file::memory:?cache=shared",
        schema="main",
        include_tables=["my_table"]
    )
    db_chain = SQLDatabaseChain.from_llm(llm, langchain_db)
    

关键注意点

  • 确保include_tables里的表名和实际创建的表名完全一致(你之前代码里写的mytable是错误的,应该是my_table)。
  • 共享内存模式仅适用于同一进程内的连接,跨进程无法共享。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 21:12:09