测试平台系列(54) 数据库表接口适配前端页面(下)

2021年09月16日 阅读数:1
这篇文章主要向大家介绍测试平台系列(54) 数据库表接口适配前端页面(下),主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

你们好,我是米洛,求三连!求关注测试开发坑货!前端

回顾

上一篇咱们编写了树的最外层,可是由于咱们还有很深的层级要嵌套,因此咱们如今开始。数据库

准备好了吗?数组

本文依旧有必定的难度,须要你们理解值传递和引用传递session

先看看最终效果图,来点信心。app

实现伪代码

上一节咱们写的都是伪代码,此次直接来实现它。编辑器

编写方法,查询数据库和数据表

result是咱们最终返回结果。测试

最外层咱们先查询全部的环境,并生成一个映射关系:code

环境id => 环境名称索引

为何须要env_index

那么env_index又是干什么的呢?ip

由于环境是最外层,咱们须要经过环境id找到咱们要往哪一个环境的children里面加第二层的数据,而咱们生成的是一个列表,这就致使若是咱们须要插入环境id=2的children的时候,不得不去搜索一次result,从result里面找到id="env_2"的那条数据,接着去append到他的children。

这样时间复杂度会很是高,可是若是咱们提早记录了,我环境id=2的时候插入到result的第几个children,那么就省略了从数组中查询的那步,等于用空间(env_idx)换了查询的时间

完成第一层数据录入

接着获取session,并查出全部没被删除的database数据

能够看到,咱们遍历拿到的PityDatabase数据,接着从env_map里把环境id转为环境名

再开始判断env_index里面环境名的索引,在result的第几个,若是没有的话,说明result里面尚未这个环境的任何数据。

那咱们就插入一条环境数据

result.append(dict(title=name, key=f"env_{name}", children=list()))

那此时result就变成了:

[
    {title: "fat", key: "env_3". children: []}
]

这是环境3在result的索引确定是数组的最后一个元素,由于咱们刚刚才append进去的,因此idx = len(result)-1

接着咱们把idx存起来,这个能够理解的吧~

MetaData是咱们获取数据表的关键,为了不重复生成,我这边只在最外层生成了,传递给get_tables方法。

实现内层数据

注意这里我用get_tables方法的时候,将result[idx]['children']参数传了进去,意味着后续全部的数据都会append到这个children里面去,十分方便

而children是个list,list是引用传递的。因此我在get_tables里面对list的改动,其实也是生效的,能够看到get_tables没有任何返回,那是由于个人result里头的children被改掉了,致使了个人result间接被改掉了,就这个道理

看看get_tables怎么写

  1. 咱们先经过db_helper获取到当时的链接conn,里面包含了session和engine,还记得不?

  2. 咱们再次新建一个list,叫database_child,看名字就知道,他是database再下面一层的数据。

  3. 咱们编写当前database层的节点数据,其实就是个dict,title由于咱们须要展现对应的数据库ip+port,因此是这样:

f"{data.database}({data.host}:{data.port})"

由于database有惟一id,因此key能够叫『database_{data.id}』

children便是上一步建立的list().

  1. 获取engine

  2. meta获取表信息

  3. 遍历表

这边再次说明一下,get_tables参数中的children,是环境的下一层,database_child是数据库的下一层,而dbs则是当前层次。

遍历表了之后,咱们临时建立temp数组(temp是数据表的下一层,实际上存的是字段信息。)

这段代码是把table这一层加到database_child数组里面去

你们若是实在看不明白,以key为标准:

  • key以env开头说明是环境层
  • 以database开头说明是数据库层
  • 以table开头说明是数据表层
  • 以column开头说明是字段层
  1. 遍历字段数据,并把对应的字段加到temp数组,由于改了temp数组,因此实际上database_child(表那一层)也获得了改动。

primary_key字段表明是不是主键

  1. 最终把我们这一层的dbs->带有表数据->带有字段数据,给加入到刚才传递给我们的children数组中。

查看完成数据

能够看到数据正常展现了,和前端须要的同样

这样前端仔就不会再纠结数据怎么转换了,很是好用

看看实战效果

因为原生组件提供的图标啥的都比较粗糙,咱们须要进行一下调整。

再来一发效果图,因为右侧的SQL编辑器还在路上,咱们就不废话了。