1. 程式人生 > 其它 >測試平臺系列(52) 改造非同步資料庫連線方案

測試平臺系列(52) 改造非同步資料庫連線方案

大家好,我是米洛,求三連!求關注測試開發坑貨!

回顧

上節我們編寫了非同步sql連線的功能,經過博主一番激烈的思想鬥爭,還是決定暫時先使用同步的方式。

為什麼呢?主要是以下幾個原因:

  • 非同步(AsyncEngine)的功能還很多都不完善

    舉個例子,為了讓線上執行SQL功能更加友好,並且防止使用者寫錯表名,我們需要展示出db下有哪些表,如果能展示出表有什麼欄位,那就更完美了!但非同步Engine的話,還確實很多功能都是支援不了的,還需要等他們慢慢完善。

  • pg的非同步庫還沒選定

    雖然有一定的方向,比如GINO這樣的引擎都做了一些sqlalchemy的功能,並不只是單純的非同步資料庫driver。而同步的,我們可以用現有的psycopg2

  • 非同步同步效能差距目前來看不算大

開始改造

  • 修改get_jdbc_url方法
  • 修改test_connection方法
  • 修改get_connection方法

這邊快取了engine和session2個變數,而不只是單純的session,因為我們獲取資料庫有哪些表,需要用到engine

雖然說show tables也可以拿到表資訊,但是不夠全面。

編寫線上執行SQL的方法

在DbConfigDao.py檔案中增加online_sql方法,接受2個引數:

  • 資料庫配置id
  • sql 具體的sql語句

可以看到,我們先通過get_connection獲取到這個配置的連線session,然後execute執行了sql語句,最後呼叫:

result.mappings().all()

拿到返回資料,這個mappings()的好處是什麼呢?就是可以把執行結果按照下面的格式返回,當然也是查了許久得出的結果。

[
  {"欄位1": "欄位1的值"}
]

編寫介面

這裡的引數是配置id和sql語句,我們來看看對應的返回結果:

可以看到,基本上就是原生執行sql了,非常好用!因為本人目前電腦沒有裝pg,所以對pg的相容性可能不是很好,大家有疑問的話可以給我提issue,我會儘快相容的。

專案地址: https://github.com/wuranxu/pity

因為同步非同步的方法,有一些耽擱了進度,不要緊,下一節後端的內容會偏少,主要講怎麼想datagrip一樣展示資料表

結構,並讓使用者可以線上編寫sql,最終就是嵌入到資料構造器(前置條件)之中。

PS: 專案有了新的域名了,大家可以通過下面的網址線上體驗。這個域名我一口氣買了10年,希望自己也能繼續維護下去~

http://pity.fun