测试平台系列(51) 编写数据库连接相关方法

仓廪实则知礼节,衣食足则知荣辱。这篇文章主要讲述测试平台系列(51) 编写数据库连接相关方法相关的知识,希望能为你提供帮助。
回顾
上一节我们边写了数据库配置的功能接口,但是前端页面还没有做展示。
如果完成了前端页面增删改查页面,我想我们还需要几个功能:

  • 在线测试连接
    因为有的时候数据库配置会发生变化,如果我们不支持在线测试功能的话,可能大家还需要手动去连接一下,非常难用
  • 在线执行SQL
    这个是为了能够给用户在线运行sql语句,类似于小ide的功能,当然我们只做最核心的部分。
    那么今天我们就来完善前端页面并完成在线连接测试功能
前端部分
前端部分还是以往的dispatch模式,service.js用于发送http请求,model用于管理变量,组件通过dispatch去调用具体的方法。
测试平台系列(51) 编写数据库连接相关方法

文章图片

前端页面还是分3个部分,可以理解为3个div:
  • 搜索栏
  • 添加栏
  • 表格栏
测试平台系列(51) 编写数据库连接相关方法

文章图片

大概的页面展示是这样,我们今天重点讲一下数据库连接这块。
思考怎么做
连接部分我们仍然打算采用sqlalchemy,既然已经开始用了,而且他也支持异步session,在没遇到大坑的时候我们就不考虑更换了。
首先我们考虑以下几个点:
连接复用首先要清楚,我们之所以做数据库连接配置,是因为我们在构造数据的时候会用到,那么我们势必要维护一个数据库连接的map,充当缓存的作用。
当我们的账号密码等连接信息没有变化的时候,我们是不是可以把上次连接用的session拿出来继续使用?答案是肯定的!
而且当我们测试连接以后,这个数据库配置就被缓存了起来,如果我们要使用,直接从连接缓存里面拿就可以了。配合sqlalchemy本身自带的连接池,基本上我们要做的就比较简单,只是包一层dict即可。
缓存扩张问题举个例子,我现在配置了A数据库连接,测试了一遍,你给我缓存起来了,接着我把A改成B,由于A和B的配置不一样,所以缓存里面现在需要插入一条B数据,如果改的频繁,就会使得这个dict无限扩张,内存也会占用变大。但因为数据库配置不太可能经常变化,我们也可以在update配置的时候清楚之前的缓存。
多线程访问缓存的问题python的多线程我不是太熟悉,不太确定Fastapi内部是否会有多个线程同时读写缓存的情况,如果有,那肯定会出问题的,我们需要加????,暂时我们可以先观望一下
动起手来
我们对之前的models/init.py方法进行一些改造,我们需要增加一个DatabaseHelper类。
测试平台系列(51) 编写数据库连接相关方法

文章图片

  • init方法
    init方法创建了我们内部的dict缓存,key是数据库的连接信息,value是对应的session。
  • get_connection
    通过数据库配置去获取到对应的连接信息,首先拼接key,拿到唯一的key标识,接着去缓存找有没有初始化这个连接,有的话直接返回,没有就开始建立连接。
  • get_jdbc_url
测试平台系列(51) 编写数据库连接相关方法

文章图片

注意: pg我还没有找到合适的异步库,所以暂时先不支持它,后面再支持,总感觉pg用的人并没有那么多。
  • 删除缓存的方法
测试平台系列(51) 编写数据库连接相关方法

文章图片

  • 测试连接的方法
测试平台系列(51) 编写数据库连接相关方法

文章图片

接受一个session,如果为空,则返回错误信息。最后execute一句select 1测试是否能够正常连上数据库,不能则返回错误信息。
测试平台系列(51) 编写数据库连接相关方法

文章图片

  • 改写update方法
测试平台系列(51) 编写数据库连接相关方法

文章图片

  • 编写在线测试方法
测试平台系列(51) 编写数据库连接相关方法

文章图片

测试一哈
测试平台系列(51) 编写数据库连接相关方法

文章图片

测试平台系列(51) 编写数据库连接相关方法

文章图片

【测试平台系列(51) 编写数据库连接相关方法】今天的内容到这里就结束了,下一节我们编写在线执行SQL功能。

    推荐阅读