測試平臺系列(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