如何在Langchain的SQLDatabase.from_uri中指定要使用的Schema?
解决Langchain SQLDatabase指定PostgreSQL Schema的问题
当PostgreSQL数据库存在多个Schema时,Langchain的SQLDatabase.from_uri默认只会扫描连接默认search_path下的Schema(通常是public),如果你的表在其他Schema中,就会出现get_usable_table_names()返回空的情况。可以通过以下两种方式指定目标Schema:
方法1:使用SQLDatabase.from_uri的schema参数
直接在初始化时传入schema参数指定目标Schema名称:
db = SQLDatabase.from_uri( f"postgresql+psycopg2://{db_user}:{db_password}@{db_host}:{db_port}/{db_name}", schema="your_target_schema" # 替换为实际的Schema名称 ) print(db.dialect) print(db.get_usable_table_names()) print(db.table_info)
方法2:在连接URI中指定search_path
通过URI的options参数设置PostgreSQL的search_path,指定要加载的Schema:
# 单个Schema db = SQLDatabase.from_uri( f"postgresql+psycopg2://{db_user}:{db_password}@{db_host}:{db_port}/{db_name}?options=-csearch_path%3Dyour_target_schema" ) # 多个Schema(用逗号分隔,URL编码逗号为%2C) db = SQLDatabase.from_uri( f"postgresql+psycopg2://{db_user}:{db_password}@{db_host}:{db_port}/{db_name}?options=-csearch_path%3Dschema1%2Cschema2" )
执行修改后的代码后,get_usable_table_names()将返回指定Schema下的所有可用表,table_info也会包含这些表的结构信息。
内容的提问来源于stack exchange,提问作者Jesus Ivan Verdugo
相关产品推荐
相关产品推荐

