对于复杂的一些业务,会涉及很多张表,其间有各种各样的关联关系,在开发&测试过程中,随时需要查看这些表中的数据状态,这种情况下需要我们写一些关联查询的SQL或者多条SQL执行来查看结果,个人感觉用起来还是不太方便,所以想开发一个关联表自动进行查询的工具

后端基于spring boot自行开发;前端部分使用了Trae,让大模型来进行的开发~

后端项目代码前端项目代码体验地址

服务主要还是本地部署个人使用,为了简化,本地数据库使用了sqlite的文件形式存储,同时采用了将前端项目打包结果复制到后端项目中同步部署,所以没有其他任务外部依赖

在后端项目中启动后,直接访问 http://localhost:8080 即可使用,或者打包后通过 java -jar xxx.jar 执行

注意:

  1. 需要 jdk 版本大于等于 21
  2. 只支持MySQL数据库
  3. 没有做鉴权及SQL注入等处理,所以只建议本地安装个人使用

下面进行一下对应功能介绍

数据源管理

用来管理数据库(MySQL)的连接(需要服务所在的机器可以连接到数据库)

表字段关系管理

这里主要进行字段关系的维护,如果使用了外键的话,会自动进行同步,支持跨库关联

比如员工表(employees)的部门编码字段(dept_no)对应了,部门表(departments)的(dept_no)字段,那么我们可以这样配置(主表可以理解为包含类似外键的表)

其中的关联条件部分,使用场景为一张表根据条件关联不同的表

假设有多张表,它们的操作日志都记录在了一个叫做操作日志的表里面,同时操作日志表有一个类型字段来区分对应的表是哪个,那么我们可以在关联条件中输入对应的条件即可,如(type=1),如果没有这种场景就可以不填写

ER图查看

在创建好数据源以及维护好字段关系后,我们可以通过查看ER图来确认一下配置是否正确,并且也可以让新人快速熟悉表间关系

需要输入一下对应的db和table即可,会查找所有关联的表进行展示,并同时展示关联的字段关系,支持跨库关联

数据查询

最后就是数据的查询,选择db和表后,需要输入对应的查询条件,这时会查询对应的数据,同时会将关联的表和数据同时在下方进行展示(目前限制了单表数据最多10条)

目前是会根据选择的表向外查询关联表,是广度优先,并且对于相同的表只会查询一次,所以选择的表不同,结果可能会有所差异

后续扩展

在有个表关系的ER图后,我们可以比较容易的让大模型来帮助我们根据自然语言来生成查询SQL了

将memaid格式的ER图文本和自然语言提供给大模型即可,这里举一个小例子(langchain):

class ExecutableSql(BaseModel):
"""可执行的SQL信息"""
sql: str = Field(description="查询结果的SQL语句") def sql_generation(er_diagram: str, description: str, llm: BaseChatModel) -> str:
"""
根据用户的请求,和er图,生成最终的SQL语句
""" # 构造解析器
parser = PydanticOutputParser(pydantic_object=ExecutableSql)
# 构造提示词模版
prompt = PromptTemplate(
template="根据如何mermaid格式的ER图:\n{er_diagram}\n\n为这个请求生成SQL查询语句:\n{description}\n\n,{format_instructions}\n",
input_variables=["description", "er_diagram"],
partial_variables={"format_instructions": parser.get_format_instructions()},
) # 将提示此、llm、结果解析器构造成链
chain = prompt | llm | parser
# 使用参数实际调用获取结果
sqlInfo = chain.invoke({"er_diagram": er_diagram, "description": description})
return sqlInfo.sql

这里使用了mysql 例子中的employees数据库来实际看下,生成的ER图如下:

将左侧ER图的文本和问题,如:查询一下员工编号为10002的基本信息、所在部门,以及不同时间对应的薪资情况提供给大模型,可以得到如下结果:

SELECT
e.emp_no,
e.birth_date,
e.first_name,
e.last_name,
e.gender,
e.hire_date,
d.dept_name,
s.salary,
s.from_date AS salary_from_date,
s.to_date AS salary_to_date
FROM employees e
JOIN dept_emp de ON e.emp_no = de.emp_no
JOIN departments d ON de.dept_no = d.dept_no
JOIN salaries s ON e.emp_no = s.emp_no
WHERE e.emp_no = 10002
ORDER BY s.from_date;

我们实际执行一下,获取结果:

基于Trae开发的自动表关联查询工具的更多相关文章

  1. java 分库关联查询工具类

    问题: 由于公司业务扩大,各个子系统陆续迁移和部署在不同的数据源上,这样方便扩容,但是因此引出了一些问题. 举个例子:在查询"订单"(位于订单子系统)列表时,同时需要查询出所关联的 ...

  2. 基于Nodejs开发的web即时聊天工具

    由于公司需要开发web即时聊天的功能,开始时我们主要的实施方法是用jquery的ajax定时(10秒)轮询向服务器请求,由于是轮询请求,对 服务器的压力比较大.我们网站上线的时间不长,访问量不是很大, ...

  3. 基于SOUI开发一个简单的小工具

    基于DriectUI有很多库,比如 Duilib (免费) soui (免费) DuiVision (免费) 炫彩 (界面库免费,UI设计器付费,不提供源码) skinui (免费使用,但不开放源码, ...

  4. 基于node的cmd迷你天气查询工具

    1.前几天网上看到的,于是自己小改了一下,更换了天气查询的接口,当作练习一下node. 2.收获挺大的,捣鼓了一天,终于学会了发布npm包. 3.接下来,就介绍一下这个 mini-tianqi 的主要 ...

  5. 基于EF的数据外键关联查询

    现在很多ORM不自带外键关联的实体查询,比如我查询用户,用时将关联的角色信息查询出来,那么就要进行2次查询,很麻烦.而我现在要做的就是基于EF的外键关联查询.很方便的. 首先,创建基础查询的BaseS ...

  6. TDSQL“相似查询工具MSQL+”入选VLDB论文

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯云数据库 TencentDB发表于云+社区专栏 作者介绍:王晓宇,腾讯数据库TDSQL团队成员,目前参与TDSQL数据库内核研发工 ...

  7. C# Winform实现手机号码归属地查询工具

    摘要:本文介绍使用C#开发基于Winform的手机号码归属地查询工具,并提供详细的示例代码供参考. 一.需求描述 输入正确的手机号码,查询该号码的归属地和其他相关信息. 二.需求分析 1.实现手机号码 ...

  8. SNF开发平台WinForm-EasyQuery统计分析-效果-非常牛逼的报表查询工具

    无论是单轴曲线 .双轴曲线 .柱形图 .饼图 .雷达图 .仪表图.图表引擎全能为您轻松实现.您只需要 3 步操作(数据源准备,设计图表,挂接到您想要展示的位置)便可完成 BI 的设计. 无论是普通报表 ...

  9. 字节跳动基于ClickHouse优化实践之“多表关联查询”

    更多技术交流.求职机会.试用福利,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 相信大家都对大名鼎鼎的ClickHouse有一定的了解了,它强大的数据分析性能让人印象深刻.但在字节大量 ...

  10. BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第3章节--SharePoint 2013 开发者工具 SharePoint中基于Web开发

    BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第3章节--SharePoint 2013 开发者工具 SharePoint中基于Web开发         之前提到过, ...

随机推荐

  1. JPEG格式研究——(2)JPEG文件格式

    JPEG文件除了图像数据之外,还保存了与图片相关的各种信息,这些信息通过不同类型的TAG存储在文件中. TAG JPEG通过TAG标记压缩书记之外的信息.所有的TAG都包含一个TAG类型,TAG类型大 ...

  2. IOS颜色选择器

    IOS颜色选择器 UIColorWell UIColorWell是一个继承UIControl的视图,它不能调整大小和UISwitch类似,大小大约是44*44.点击可弹出一个选择颜色的弹窗 因为是继承 ...

  3. 使用PG的部分索引

    PG 又带来一个惊喜. 现在有一张表,每天增加几十万数据,数据量迅速超过 1亿.此时 create_at 上的索引已经非常庞大,检索速度很慢. 接下来要分表分区了? NO,PG 有一个非常有意思的特性 ...

  4. manim边学边做--移动动画

    在Manim中,其实直线移动的动画非常简单,每个Mobject对象都有animate属性, 通过obj.animate.shift()或者obj.animate.move_to()很容易将对象从一个位 ...

  5. 【Linux】当初的学习笔记

    目录 Linux 笔记 linux基本概念 linux终端四部分 linux的实质 linux系统操作命令 查询用户 who who -H whoami 修改密码 快速切换到用户目录 sshd sys ...

  6. File was changed on disk

    刚开始从eclipse转到idea,发现idea从svn同步代码后,点开一个java类报错 说是某个方法不存在,以为是别人代码没有提全,就点到别人代码里面去看,顶行出现"File was c ...

  7. 关于在VMware中安装的CentOS7系统中无法安装ntp

    一.问题引言 今天在虚拟机中新安装了CentOS7,在使用yum命令时,出现如下如错误: 2.点击图片中链接,即是"2"中的红框,发现该链接竟不可达 3.于是开始找度娘,但并没有发 ...

  8. Qt音视频开发05-保存视频文件(yuv/h264/mp4)

    一.前言 和音频存储类似,视频的存储也对应三种格式,视频最原始的数据是yuv(音频对应pcm),视频压缩后的数据是h264(音频对应aac),由于很多播放器或者早期的播放器不支持直接播放h264文件, ...

  9. Qt编写的项目作品30-录音播放控件(雨田哥作品)

    一.功能特点 使用FMOD音频引擎开发,支持跨平台,虚拟频道,插件设计. 数字回放,多个声卡,多路输出,多路输入. 自定义回放延迟,网络特性. 支持类型:DLS.M3U.ASX.WAX.PLS.AIF ...

  10. DataTable 循环取值

    //list是datatable类型 for (int i = 0; i < list.Rows.Count; i++) { var A = list.Rows[i]["列名" ...