簡體   English   中英

在AWS Lambda中無法使用pydobc在Python 3.6中使用pyodbc連接到SQL Server

[英]Unable to use pydobc to connect to SQL Server using pyodbc in Python 3.6 in AWS Lambda

我一直在努力,無法弄清楚如何通過pydobc和AWS Lambda使用python 3.6連接到SQL Server。

我按照AWS提供的說明創建了一個Amazon Linux AMI,可以在其上安裝Microsoft ODBC驅動程序(v13和v17),將unixODBC升級到受支持的版本,並獲取我的python代碼以連接到AWS RDS SQL服務器實例。

但是,我無法弄清楚如何成功打包這些更改以將該代碼部署到AWS Lambda並使其正常工作。

我收到兩個錯誤之一,具體取決於我如何嘗試引用ODBC驅動程序。 使用此語法

cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=servername.account.region.rds.amazonaws.com,port;DATABASE=database;UID=user;PWD=password'

我得到錯誤:

"errorMessage": "('01000', \"[01000] [unixODBC][Driver Manager]Can't open lib 'SQL Server' : file not found (0) (SQLDriverConnect)\")",

我嘗試使用其他驅動程序別名(用於SQL Server的ODBC驅動程序17,用於SQL Server的ODBC驅動程序13),結果相同。

使用語法:

    cnxn = pyodbc.connect('DRIVER=lib/libmsodbcsql-13.so;SERVER=servername.account.region.rds.amazonaws.com,port;DATABASE=database;UID=user;PWD=password')

我得到錯誤:

'IM004', "[IM004] [unixODBC][Driver Manager]Driver's SQLAllocHandle on SQL_HANDLE_HENV failed (0) (SQLDriverConnect)")

我的.ZIP部署文件中包含以下代碼:

  1. simple_db.py-創建連接的我的代碼
  2. pyodbc.so-來自https://github.com/Miserlou/lambda-packages/tree/master/lambda_packages/pyodbc的pyodbc的Lambda版本)
  3. odbcinst.ini-嘗試使用Linux版本的odbcinst列出驅動程序。
  4. lib / libmsodbcsql-13.so-從Amazon Linux安裝復制
  5. libodbc.so.2-也可以從Amazon Linux安裝中復制,嘗試部署unixODBC版本。

我弄弄了目錄,並從/ usr / lib64目錄中添加了更多libodbc *。*文件,但到目前為止沒有任何效果。 以及帶來整個msodbcsql目錄(帶有/ etc,/ include,/ lib64和/ share)。

任何幫助將不勝感激!

基於此答案: AWS Lambda函數可使用Python連接到SQL Server

您將需要編譯unixODBC,並使用其共享庫。 然后安裝MS驅動程序,獲取其共享庫並收集在一起

# Start a container that mimic the lambda environment
docker run -it --rm --entrypoint bash  -e ODBCINI=/var/task -e ODBCSYSINI=/var/task -v "$PWD":/var/task  lambci/lambda:build-python2.7

# Then, download ODBC source code, compile and take the output
curl ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.5.tar.gz -O
tar xvzf unixODBC-2.3.5.tar.gz
cd unixODBC-2.3.5
./configure  --sysconfdir=/var/task  --disable-gui --disable-drivers --enable-iconv --with-iconv-char-enc=UTF8 --with-iconv-ucode-enc=UTF16LE --prefix=/home
make install
cd ..
mv /home/* .
mv unixODBC-2.3.5 unixODBC-2.3.5.tar.gz /tmp/

# Install MSsql odbc driver
curl https://packages.microsoft.com/config/rhel/6/prod.repo > /etc/yum.repos.d/mssql-release.repo
ACCEPT_EULA=Y yum -y install msodbcsql
export CFLAGS="-I/var/task/include"
export LDFLAGS="-L/var/task/lib"

# Then you can install pyodbc (or pip install -t . -r requirements.txt)
pip install pyodbc -t .

cp -r /opt/microsoft/msodbcsql .

cat <<EOF > odbcinst.ini
[ODBC Driver 13 for SQL Server]
Description=Microsoft ODBC Driver 13 for SQL Server
Driver=/var/task/msodbcsql/lib64/libmsodbcsql-13.1.so.9.2
UsageCount=1
EOF

cat <<EOF > odbc.ini
[ODBC Driver 13 for SQL Server]
Driver      = ODBC Driver 13 for SQL Server
Description = My ODBC Driver 13 for SQL Server
Trace       = No
EOF

# Test if it works
python -c "import pyodbc; print(pyodbc.drivers());"
python -c 'import pyodbc;conn = pyodbc.connect("DRIVER={ODBC Driver 13 for SQL Server}; SERVER=YOUr_SERVER:ADD;PORT=1443;DATABASE=TestDB;UID=SA;PWD=<YourStrong!Passw0rd>");crsr = conn.cursor();rows = crsr.execute("select @@VERSION").fetchall();print(rows);crsr.close();conn.close()'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM