Files
2025-05-21 17:57:53 +08:00

3.8 KiB
Raw Permalink Blame History

SQLDB Wrapper

agentUniverse基于SQLAlchemy和langchain的SQLDatabase提供了一个方便用户使用大多数基于SQL的数据库的SQLDBWrapper如SQLite、MySQL、Oracle等具体请参考SQLAlchemy官方网站。通过SQLDBWrapper,您可以方便的同时管理多种不同的数据库连接对象。

注册方式

第一步:配置扫描路径

agentUniverse通过在应用启动时扫描配置路径的方式寻找SQLDBWrapper的配置文件并进行自动注册扫描的路径配置在配置文件config.toml中:

[CORE_PACKAGE]
default = ['default_scan_path']
sqldb_wrapper = ['sqldb_wrapper_scan_path']

agentUniverse默认会扫描defaultsqldb_wrapper中的所有路径,sqldb_wrapper下的路径配置优先级高于default

第二步:配置文件

name: 'demo_sql'
description: 'demo_sql'
db_uri: "sqlite:///./demo.db"
sql_database_args:
  include_tables: ["users"]
engine_args:
  pool_size: 10
metadata:
  type: 'SQLDB_WRAPPER'
  • name:SQLDBWrapper的名称用于标识唯一的一个实例。
  • description:对SQLDBWrapper的名称功能的描述。
  • db_uri:一个SQLAlchemy风的数据库uri用于创建SQLAlchemy引擎。
  • sql_database_args:可选参数,LangChainSQLDatabase类的配置参数,具体可参考LangChain官网
  • engine_args:可选参数用于配置SQLAlchemy的引擎参数。具体可配置内容请参考SQLAlchemy网页
  • metadata:表示该配置是一个SQLDB_WRAPPER配置无需改动。

使用方式

SQLDBWrapper类有以下几个函数供用户使用

run

run接收一个str类型的参数command表示一个SQL语句并通过SQLAlchemy执行该SQL并返回结果。结果形式为一个list,如果command为查询语句则list中会含有查询的结果每一个元素都是一个字典代表一行数据库中的数据key为列名而value为对应的值。

from agentuniverse.database.sqldb_wrapper import SQLDBWrapper
from agentuniverse.database.sqldb_wrapper_manager import SQLDBWrapperManager

demo_sqldb_wrapper:SQLDBWrapper = SQLDBWrapperManager().get_instance_obj("demo_sqldb_wrapper")
demo_sqldb_wrapper.run("select * from USERS")

返回结果示例:

[{'age': 30, 'id': 1, 'name': 'Alice'}, {'age': 25, 'id': 2, 'name': 'Bob'}]

run_with_str_return

run接收一个str类型的参数command表示一个SQL语句并通过SQLAlchemy执行该SQL并返回结果。结果形式为一个str,如果command为查询语句则str为所有查询结果数据的拼接,且如果在sql_database_args中配置了max_string_length参数的话会对结果进行截断。这个函数更方便用于将结果作为llm的输入

from agentuniverse.database.sqldb_wrapper import SQLDBWrapper
from agentuniverse.database.sqldb_wrapper_manager import SQLDBWrapperManager

demo_sqldb_wrapper:SQLDBWrapper = SQLDBWrapperManager().get_instance_obj("demo_sqldb_wrapper")
demo_sqldb_wrapper.run_with_str_return("select * from USERS")

返回结果示例:

"[(1, 'Alice', 30), (2, 'Bob', 25)]"

sql_database

如果您希望使用一些SQLAlchemy或者SQLDatabase原生的功能您可以通过访问SQLDBWrapper的sql_database属性获取对应对象:

from agentuniverse.database.sqldb_wrapper import SQLDBWrapper
from agentuniverse.database.sqldb_wrapper_manager import SQLDBWrapperManager

demo_sqldb_wrapper:SQLDBWrapper = SQLDBWrapperManager().get_instance_obj("demo_sqldb_wrapper")
sql_database_ins = demo_sqldb_wrapper.sql_database
sql_alchemy_engine = sql_database_ins._engine