日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

函数计算 Python 连接 SQL Server 小结

發(fā)布時(shí)間:2024/9/5 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 函数计算 Python 连接 SQL Server 小结 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

python 連接數(shù)據(jù)庫通常要安裝第三方模塊,連接 MS SQL Server 需要安裝?pymssql?。由于 pymsql 依賴于?FreeTDS,對于先于 2.1.3 版本的 pymssql,需要先安裝 FreeTDS。由于早期版本的 pymssql 只提供了 windows 下的 wheel 打包,其他平臺(如 linux)需要從源碼包編譯安裝,那需要先安裝 freetds-dev 包,以提供必要的頭文件。

函數(shù)計(jì)算的 runtime 運(yùn)行時(shí)的目錄是只讀的,所以對于需要使用 apt-get 和 pip 安裝依賴的場景,需要將依賴安裝在代碼目錄而不是系統(tǒng)目錄。具體安裝方法可以參考《函數(shù)計(jì)算安裝依賴庫方法小結(jié)》。而 pymssql 的老版本涉及到編譯安裝,比常見的二級制安裝到本地目錄略復(fù)雜一些。

函數(shù)計(jì)算依賴安裝需要有個(gè)模擬的 linux 環(huán)境,從前我們推薦使用 fcli shell 的 sbox ,啟動一個(gè)接近生產(chǎn)環(huán)境的 docker container 進(jìn)行依賴安裝。因?yàn)橛行┮蕾囀瞧脚_相關(guān)的,在 mac 系統(tǒng)安裝的動態(tài)鏈接庫無法在函數(shù)計(jì)算的 linux 環(huán)境下運(yùn)行, pymssql 恰好屬于這種情況。本文我將使用?fc-docker進(jìn)行安裝和本地測試。

下面的例子是基于函數(shù)計(jì)算 runtime python3.6 的,對于 python2.7 也進(jìn)行了測試,同樣適用。

準(zhǔn)備測試環(huán)境

首先使用 docker 在本機(jī) Mac 電腦下運(yùn)行一個(gè) SQL Server 2017 服務(wù),并初始化表結(jié)構(gòu),編輯一個(gè) index.py 的測試文件,以驗(yàn)證數(shù)據(jù)庫訪問是否成功。

$ docker pull mcr.microsoft.com/mssql/server:2017-latest$ docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Codelife.me' \-p 1433:1433 --name sql1 \-d mcr.microsoft.com/mssql/server:2017-latest

將 SQL Server 啟動于 1433 端口,并設(shè)定 SA 賬戶密碼為?Codelife.me

$ brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release $ brew update $ ACCEPT_EULA=y brew install --no-sandbox msodbcsql mssql-tools

使用 homebrew 安裝 mssql 客戶端 sqlcmd。

$ sqlcmd -S localhost -U SA -P 'Codelife.me' 1>CREATE DATABASE TestDB 2>SELECT Name from sys.Databases 3>GO Name ----------------------------------------------- master tempdb model msdb TestDB (5 rows affected)

創(chuàng)建測試數(shù)據(jù)庫 TestDB。

1> USE TestDB 2> CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT) 3> INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154); 4> GO Changed database context to 'TestDB'. (1 rows affected) (1 rows affected)

創(chuàng)建一張 Inventory 表,并參入一行測試數(shù)據(jù)。

1> SELECT * FROM Inventory WHERE quantity > 152; 2> GO id name quantity ----------- -------------------------------------------------- ----------- 2 orange 154 (1 rows affected) 1> QUIT

驗(yàn)證一下插入結(jié)果并退出。

準(zhǔn)備一個(gè)測試函數(shù)

import pymssqldef handler(event, context): conn = pymssql.connect( host=r'docker.for.mac.host.internal', user=r'SA', password=r'Codelife.me', database='TestDB' ) cursor = conn.cursor() cursor.execute('SELECT * FROM inventory WHERE quantity > 152') result = '' for row in cursor: result += 'row = %r\n' % (row,) conn.close() return result

編寫一個(gè)測試函數(shù) index.py。該函數(shù)連接 mac 宿主機(jī)docker.for.mac.host.internal?(這里不能是 localhost,因?yàn)?fc-docker 會將函數(shù)運(yùn)行在 container 內(nèi)部)的 SQL Server 服務(wù)。執(zhí)行一個(gè)查詢,并把結(jié)果返回出來。

最新版的 pymssql

創(chuàng)建一個(gè)空目錄,存放上 index.py 文件。將命令會話的當(dāng)前路徑切換到 index.py 所在的目錄,然后執(zhí)行

$ docker run --rm --name mssql-builder -t -d -v $(pwd):/code --entrypoint /bin/sh aliyunfc/runtime-python3.6 $ docker exec -t mssql-builder pip install -t /code pymssql $ docker stop mssql-builder
  • 這里使用了 fc-docker 提供的 python3.6 的模擬環(huán)境:aliyunfc/runtime-python3.6
  • 第一行啟動了一個(gè)不會退出的 docker container,第二行使用 docker exec 進(jìn)入這個(gè) container 安裝依賴,最后一行退出該 container。因?yàn)楸镜芈窂?$(pwd) 被掛載到 container 內(nèi)部的 /code 目錄,所以 container 退出以后 /code 目錄的內(nèi)容還會保留在本地當(dāng)前路徑下。
  • pip 通過 -t 參數(shù)將 wheel 包安裝在 /code 目錄下。
  • $ docker run --rm -v $(pwd):/code aliyunfc/runtime-python3.6 --handler index.handler row = (2, 'orange', 154)RequestId: d66496e9-4056-492b-98d9-5bf51e448174 Billed Duration: 144 ms Memory Size: 19

    執(zhí)行上面命令可以順利返回結(jié)果。對于不需要使用老本 pymssql 的用戶看到這里就可以結(jié)束了。

    早期版本的 pymssql

    對于早于 2.1.3 版本的 pymssql, pip install 會觸發(fā)源碼編譯安裝,對于這種情況,需要安裝編譯時(shí)依賴的 freetds-dev,以及運(yùn)行時(shí)依賴的 libsybdb5。編譯時(shí)依賴可以直接安裝在系統(tǒng)目錄里,運(yùn)行時(shí)依賴必須安裝在本地目錄下。

    docker run --rm --name mssql-builder -t -d -v $(pwd):/code --entrypoint /bin/sh aliyunfc/runtime-python3.6docker exec -t mssql-builder apt-get install -y -d -o=dir::cache=/code libsybdb5 docker exec -t mssql-builder bash -c 'for f in $(ls /code/archives/*.deb); do dpkg -x $f $(pwd) ; done;' docker exec -t mssql-builder bash -c "rm -rf /code/archives/; mkdir /code/lib;cd /code/lib; ln -sf ../usr/lib/x86_64-linux-gnu/libsybdb.so.5 ." docker exec -t mssql-builder apt-get install -y freetds-dev docker exec -t mssql-builder pip install cython docker exec -t mssql-builder pip install -t /code pymssql==2.1.3 docker stop mssql-builder
  • 第一行啟動一個(gè) container,第十行停止并自動刪除該 container。
  • 第二行至第三行將運(yùn)行時(shí)依賴 libsybdb5 安裝于本地目錄。
  • 將動態(tài)鏈接庫 libsybdb.so.5 鏈接到目錄 /code/lib 目錄下,因?yàn)樵撃夸浤J(rèn)配置到了環(huán)境變量 LD_LIBRARY_PATH 下。
  • 將 freetds-dev 和 cython 安裝到系統(tǒng)目錄,用于 pymssql 編譯安裝,因?yàn)檫\(yùn)行時(shí) pymssql 不需要這兩個(gè)庫,所以無需安裝在本地目錄
  • 安裝 2.1.3 版本的 pymssql,從 2.1.4 版本開始已經(jīng)不需要源碼安裝了。
  • $ docker run --rm -v $(pwd):/code aliyunfc/runtime-python3.6 --handler index.handler row = (2, 'orange', 154)RequestId: d66496e9-4056-492b-98d9-5bf51e448174 Billed Duration: 144 ms Memory Size: 19

    測試通過。

    小結(jié)

    這是一份來遲的函數(shù)計(jì)算使用 sql server 數(shù)據(jù)庫的配置文檔。當(dāng)前版本的 pymssql 已經(jīng)不再需要源碼安裝了。但是 pip 源碼包安裝的方法,對于其他類似的場景也是適用的。

    本文也提供了一種基于 fc-docker 的配置和調(diào)試方法,不同 fcli 的 sbox,fc-docker 可以寫成腳本反復(fù)執(zhí)行,并且也可以用于本地模擬執(zhí)行,對于 CI 場景非常有幫助。

    ?

    原文鏈接
    本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。

    轉(zhuǎn)載于:https://www.cnblogs.com/yunqishequ/p/9999615.html

    總結(jié)

    以上是生活随笔為你收集整理的函数计算 Python 连接 SQL Server 小结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。