滿意的看著下午三點忠信的小幫手準時啟動完成任務,這資料收進來該如何使用呢?必須在正確的時間,經過正確的計算,以正確的格式,正確的終端,顯示給需要資訊的人。非常幸運的,大量強大的工具已經變得那麼容易取得,跨系統傳輸介面已經樹立了標準,學習曲線也已大幅降低,複雜的資料旅程完全操控在幾行程式間。
先前程式的回傳值只是簡單的字串,傳達的訊息只是「執行完成了」,但目前的需求是「給我整張圖表,我要細細解讀」,所以大量的回傳資料是需要的。搞過 web service, soup, xml 等這些東西的人會有更深的體會,json 格式的廣泛使用對開發工作是何等大的救贖!先想辦法把回傳資料轉成 json 格式的字串。把原本又臭又長的組字串程式變成一句 json.dump(),立刻轉成合規的 json 字串格式,以此格式丟給任何外部系統,將絲毫沒有違的全部無縫接軌。
以上只是一筆資料,觀察之只是一堆以大括號包裝的 key-value 似乎沒甚麼,但 json 之所以強大是可以包含巢狀複雜物件,也可以包含「物件陣列」,這樣就可以傳「大的物件」,和「大量物件」,我這次想實做的是傳回近 30 天的資料集,原始形式就是長度為 30 的物件陣列。
為此新的功能需要新增一個全新的 function,選擇類別為 HttpTrigger,這過程已經漸漸熟練了。將原初的 name 參數改為 day,當作傳回資料的筆數;另外查詢資料庫的功能切開到一個副程序 get_market_info() 實作,預計傳回 dataframe,這是 pandas 套件中用途最廣功能最強大的資料結構,另外發現 dataframe 類別天生已經提供 to_json() 的方法,真是太方便了,之前的 json.dumps() 就不需要了,json 的支援度就是廣,有 json 好辦事。
接下來實作資料庫查詢部分,pyodbc 的連線建立已經熟悉,跟先前執行 delete and insert 指令是一樣的,此次查詢指令需要回傳較大量的資料,同樣發現 pandas 套件已經與 pyodbc 深度整合完成,直接提供 read_sql() 方法回傳 dataframe,得來全不費工夫,python 就是這麼迷人。
deploy to azure 也是一次達陣
經過這五回合的研究,我們已經以 azure function 為樞紐,建立了一個資料驅動系統架構的雛型,在進一步開發之前,我想需要先搞定嚴謹的授權機制,才會有更強的誘因以開發更多有價值的功能。待續。
By Newman Chen 2022/3/6
參考資料
https://www.delftstack.com/zh-tw/howto/python-pandas/pandas-dataframe-to-json/