langchain_community.utilities.SQLDatabase: include_tables {...} 在数据库中未找到,

koaltpgm  于 3个月前  发布在  其他
关注(0)|答案(3)|浏览(33)

检查其他资源

  • 我为这个问题添加了一个非常描述性的标题。
  • 我在LangChain文档中使用集成搜索进行搜索。
  • 我使用GitHub搜索找到了一个类似的问题,但没有找到。
  • 我确信这是LangChain中的一个bug,而不是我的代码。
  • 通过更新到LangChain的最新稳定版本(或特定集成包)无法解决此错误。

示例代码

from langchain_community.utilities import SQLDatabase

host = config["DEFAULT"]["DB_HOST"]
port = config["DEFAULT"]["DB_PORT"]
db_name = config["DEFAULT"]["DB_NAME"]
username = config["DEFAULT"]["DB_USERNAME"]
password = os.getenv(config["DEFAULT"]["DB_PASSWORD"])

url = f"postgresql+psycopg2://{username}:{password}@{host}:{port}/{db_name}"

include_tables = [
    "schema",
    "schema_field"
]

db = SQLDatabase.from_uri(url, include_tables=include_tables)

错误信息和堆栈跟踪(如果适用)

{
"name": "ValueError",
"message": "include_tables {'schema_field', 'schema'} not found in database",
"stack": "---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[15], line 16
9 url = f\"postgresql+psycopg2://{username}:{password}@{host}:{port}/{db_name}\"
11 include_tables = [
12     \"schema\",
13     \"schema_field\"
14 ]
---> 16 db = SQLDatabase.from_uri(url, include_tables=include_tables)

File ~/mambaforge/envs/langchain/lib/python3.12/site-packages/langchain_community/utilities/sql_database.py:135, in SQLDatabase.from_uri(cls, database_uri, engine_args, **kwargs)
133 \"\"\"Construct a SQLAlchemy engine from URI.\"\"\"
134 _engine_args = engine_args or {}
--> 135 return cls(create_engine(database_uri, **_engine_args), **kwargs)

File ~/mambaforge/envs/langchain/lib/python3.12/site-packages/langchain_community/utilities/sql_database.py:82, in SQLDatabase.__init__(self, engine, schema, metadata, ignore_tables, include_tables, sample_rows_in_table_info, indexes_in_table_info, custom_table_info, view_support, max_string_length, lazy_table_reflection)
80     missing_tables = self._include_tables - self._all_tables
81     if missing_tables:
---> 82         raise ValueError(
83             f\"include_tables {missing_tables} not found in database\"
84         )
85 self._ignore_tables = set(ignore_tables) if ignore_tables else set()
86 if self._ignore_tables:

ValueError: include_tables {'schema_field', 'schema'} not found in database"
}

描述

使用:

include_tables = [
    "schema$raw",
    "schema_field$raw"
]

而不是没有 $raw 后缀的字段可以正常工作。
在这个PostgreSQL数据库中,每个模式都有 $raw 版本(例如, schema$rawschema )。 $raw 版本包含所有记录,而非原始版本包含“清理”后的表。
似乎 langchain_community.utilities.SQLDatabase 没有正确处理这种情况。它似乎只检测到 $raw 模式。

系统信息

系统信息

操作系统:Darwin
操作系统版本:Darwin Kernel Version 23.4.0: Fri Mar 15 00:12:49 PDT 2024; root:xnu-10063.101.17~1/RELEASE_ARM64_T6020
Python版本:3.12.3 | 由conda-forge打包 | (main, Apr 15 2024, 18:35:20) [Clang 16.0.6]

软件包信息

langchain_core: 0.2.1
langchain: 0.2.1
langchain_community: 0.0.38
langsmith: 0.1.77
langchain_groq: 0.1.5
langchain_openai: 0.1.8
langchain_text_splitters: 0.2.0
langgraph: 0.0.69

没有安装的软件包(不一定是问题)

以下软件包未找到:
langserve

cwdobuhd

cwdobuhd1#

请确保您的数据库中存在表格:"schema" 和 "schema_field"。

xkftehaa

xkftehaa2#

这个问题似乎是由使用 sqlalchemy.inspect 列出 langchain_community.utilities.SQLDatabase 中的所有表引起的。如果我运行 sqlalchemy.inspect :

from sqlalchemy import (
    create_engine,
    inspect
)

engine = create_engine(url)
inspector = inspect(engine)
inspector.get_table_names()

...那么我只能看到 $raw 表的名称。所有表格(原始和非原始)都位于同一个数据库模式中,所以这不是问题所在。

tp5buhyn

tp5buhyn3#

问题是由于非 $raw 版本的表实际上是视图(每个 $raw 表的过滤版本)。如果 langchain_community.utilities.SQLDatabase 支持表视图,将会很有帮助。例如,以下是 SQLAlchemy 代码来列出视图:

# Create SQLAlchemy engine
engine = create_engine(url)
 
# Create inspector
inspector = inspect(engine)
 
# Get all view names
view_names = inspector.get_view_names()

相关问题