倍可親

回復: 1
列印 上一主題 下一主題

函數計算 Python 連接 SQL Server 小結

[複製鏈接]

781

主題

1119

帖子

5174

積分

二級貝殼核心

Rank: 5Rank: 5

積分
5174
跳轉到指定樓層
樓主
紅遍大地 發表於 2018-11-24 10:37 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  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 版本開始已經不需要源碼安裝了。

  

  測試通過。

781

主題

1119

帖子

5174

積分

二級貝殼核心

Rank: 5Rank: 5

積分
5174
沙發
 樓主| 紅遍大地 發表於 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/

回復 支持 反對

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 註冊

本版積分規則

關於本站 | 隱私權政策 | 免責條款 | 版權聲明 | 聯絡我們

Copyright © 2001-2013 海外華人中文門戶:倍可親 (http://big5.backchina.com) All Rights Reserved.

程序系統基於 Discuz! X3.1 商業版 優化 Discuz! © 2001-2013 Comsenz Inc.

本站時間採用京港台時間 GMT+8, 2025-7-25 23:46

快速回復 返回頂部 返回列表