自然语言转SQL,轻松搞定Excel数据查询
本文介绍了一个基于Rust开发的表格数据处理工具,可将Excel导入数据库并通过SQL查询。该工具集成大模型能力,支持自然语言转SQL查询。主要功能包括:用户登录、Excel上传、SQL查询编写与执行。该工具简化了传统的Excel数据处理流程,提高了工作效率。
·
起因
之前公司的业务人员,经常会拿几个excel给我,希望我帮他们做些过滤。而我一般的操作都是,把excel导入到数据库不同的表中。通过sql进行关联查询,并过滤出结果。再导出excel给他们。因为处理的多了,所以想着做成一个工具,节省导入导出数据库的操作。
现在也集成了大模型,可以将自然语言转换成SQL,再进行数据查询。
地址如下,大家可以体验下:点它-->数据核心表格应用
使用说明
登录
点击登录按钮,输入账号和密码,进行登录。如果没有账号,会自动创建账号。

上传Excel
登录后,在左侧区域上传文件。

编写查询语句
编写查询语句,并执行。在弹出窗口中选择相关的表。就可以看到结果。



修改SQL
生成的SQL不满意,可以直接修改SQL,并执行。

硬货
以下是主要代码,这里使用的是Rust语言。
主方法逻辑如下:获取前端的参数,根据table id 获取对应的表定义。再调用大模型生成sql。最后根据获取的sql,检索出结果,并返回。
pub async fn nature_search(claims: Claims, Json(po): Json<NatureSearchPO>) -> Json<CommonResult<NatureSearchRetPO>> {
let mut ret = NatureSearchRetPO::default();
let schema = claims.get_schema();
// 获取table定义
let ddls :Vec<String> = search_ddl(&po.table_ids,schema.as_str()).await;
// 调用sqlcoder 获取sql
let sql = get_sql(&po.text,&ddls).await;
info!("sql: {}", sql);
// 执行sql
let vs:Vec<Value> = exec_sql(&sql, schema.as_str()).await;
ret.sql = sql;
ret.data = vs;
Json(CommonResult::success(ret))
}
get_sql方法,接收用户输入和DDL,调用大模型,获取sql。
async fn get_sql(text: &String, ddls: &Vec<String>) -> String {
let ddl_str = ddls.join("\n");
let question = format!("## Task\r\nGenerate a SQL query to answer the following question:\r\n`{text}`\r\n\r\n### Database Schema\r\nThe query will run on a database with the following schema:\r\n{ddl_str}\n\r\n\r\n### Context\r\n\r\n### SQL\r\nGiven the database schema, here is the SQL query that answers `{text}`:\r\n```sql");
let sql = crate::data::services::llm::llm_sqlcoder::get_sql_from_sqlcoder(&question).await.unwrap();
sql
}
更多推荐
所有评论(0)