倍可親
標題:
函數計算 Python 連接 SQL Server 小結
[列印本頁]
作者:
紅遍大地
時間:
2018-11-24 10:37
標題:
函數計算 Python 連接 SQL Server 小結
2018-11-23 22:55macos/客戶端/line
Python 連接資料庫通常要安裝第三方模塊,連接 MS SQL Server 需要安裝 pymssql 。由於 pymsql 依賴於 FreeTDS,對於先於 2.1.3 版本的 pymssql,需要先安裝 FreeTDS。由於早期版本的 pymssql 只提供了 windows 下的 wheel 打包,其他平台(如 linux)需要從源碼包編譯安裝,那需要先安裝 freetds-dev 包,以提供必要的頭文件。
函數計算的 runtime 運行時的目錄是只讀的,所以對於需要使用 apt-get 和 pip 安裝依賴的場景,需要將依賴安裝在代碼目錄而不是系統目錄。具體安裝方法可以參考《函數計算安裝依賴庫方法小結》。而 pymssql 的老版本涉及到編譯安裝,比常見的二級制安裝到本地目錄略複雜一些。
函數計算依賴安裝需要有個模擬的 linux 環境,從前我們推薦使用 fcli shell 的 sbox ,啟動一個接近生產環境的 docker container 進行依賴安裝。因為有些依賴是平台相關的,在 mac 系統安裝的動態鏈接庫無法在函數計算的 linux 環境下運行, pymssql 恰好屬於這種情況。本文我將使用 fc-docker 進行安裝和本地測試。
下面的例子是基於函數計算 runtime python3.6 的,對於 python2.7 也進行了測試,同樣適用。
準備測試環境
首先使用 docker 在本機 Mac 電腦下運行一個 SQL Server 2017 服務,並初始化表結構,編輯一個 index.py 的測試文件,以驗證資料庫訪問是否成功。
將 SQL Server 啟動於 1433 埠,並設定 SA 賬戶密碼為 Codelife.me
使用 homebrew 安裝 mssql 客戶端 sqlcmd。
創建測試資料庫 TestDB。
創建一張 Inventory 表,並參入一行測試數據。
驗證一下插入結果並退出。
準備一個測試函數
編寫一個測試函數 index.py。該函數連接 mac 宿主機docker.for.mac.host.internal (這裡不能是 localhost,因為 fc-docker 會將函數運行在 container 內部)的 SQL Server 服務。執行一個查詢,並把結果返回出來。
最新版的 pymssql
創建一個空目錄,存放上 index.py 文件。將命令會話的當前路徑切換到 index.py 所在的目錄,然後執行
這裡使用了 fc-docker 提供的 python3.6 的模擬環境:aliyunfc/runtime-python3.6
第一行啟動了一個不會退出的 docker container,第二行使用 docker exec 進入這個 container 安裝依賴,最後一行退出該 container。因為本地路徑 $(pwd) 被掛載到 container 內部的 /code 目錄,所以 container 退出以後 /code 目錄的內容還會保留在本地當前路徑下。
pip 通過 -t 參數將 wheel 包安裝在 /code 目錄下。
執行上面命令可以順利返回結果。對於不需要使用老本 pymssql 的用戶看到這裡就可以結束了。
早期版本的 pymssql
對於早於 2.1.3 版本的 pymssql, pip install 會觸發源碼編譯安裝,對於這種情況,需要安裝編譯時依賴的 freetds-dev,以及運行時依賴的 libsybdb5。編譯時依賴可以直接安裝在系統目錄里,運行時依賴必須安裝在本地目錄下。
第一行啟動一個 container,第十行停止並自動刪除該 container。
第二行至第三行將運行時依賴 libsybdb5 安裝於本地目錄。
將動態鏈接庫 libsybdb.so.5 鏈接到目錄 /code/lib 目錄下,因為該目錄默認配置到了環境變數 LD_LIBRARY_PATH 下。
將 freetds-dev 和 cython 安裝到系統目錄,用於 pymssql 編譯安裝,因為運行時 pymssql 不需要這兩個庫,所以無需安裝在本地目錄
安裝 2.1.3 版本的 pymssql,從 2.1.4 版本開始已經不需要源碼安裝了。
測試通過。
作者:
紅遍大地
時間:
2018-11-24 10:38
小結
這是一份來遲的函數計算使用 sql server 資料庫的配置文檔。當前版本的 pymssql 已經不再需要源碼安裝了。但是 pip 源碼包安裝的方法,對於其他類似的場景也是適用的。
本文也提供了一種基於 fc-docker 的配置和調試方法,不同 fcli 的 sbox,fc-docker 可以寫成腳本反覆執行,並且也可以用於本地模擬執行,對於 CI 場景非常有幫助。
參考閱讀
http://www.pymssql.org/en/latest/intro.html#install
http://www.freetds.org/
http://www.pymssql.org/en/stable/pymssql_examples.html
https://docs.microsoft.com/en-us ... iew=sql-server-2017
https://cloudblogs.microsoft.com ... for-macos-released/
歡迎光臨 倍可親 (https://big5.backchina.com/)
Powered by Discuz! X3.1