【发布时间】:2018-12-21 06:36:17
【问题描述】:
我一直在苦苦挣扎,无法弄清楚如何通过 pydobc 和 AWS Lambda 使用 python 3.6 连接到 SQL Server。
我按照 AWS 提供的说明创建了一个 Amazon Linux AMI,我能够在其上安装 Microsoft ODBC 驱动程序(v13 和 v17),将 unixODBC 升级到支持的版本,并让我的 python 代码连接到AWS RDS SQL Server 实例。
但是,我无法弄清楚如何成功打包这些更改以将此代码部署到 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 部署文件中有以下代码:
- simple_db.py - 我创建连接的代码
- pyodbc.so - 来自 https://github.com/Miserlou/lambda-packages/tree/master/lambda_packages/pyodbc 的 pyodbc 的 Lambda 版本
- odbcinst.ini - 尝试使用 Linux 版本的 odbcinst 来列出驱动程序。
- lib/libmsodbcsql-13.so - 从 Amazon Linux 安装复制
- libodbc.so.2 - 同样从 Amazon Linux 安装复制,尝试部署 unixODBC 版本。
我玩弄了目录,并从 /usr/lib64 目录添加了更多 libodbc*.* 文件,但到目前为止没有任何效果。以及带来整个 msodbcsql 目录(带有 /etc、/include、/lib64 和 /share)。
任何帮助将不胜感激!
【问题讨论】:
-
Driver 名称看起来是 Windows。通常是 ODBC Driver 13 for SQL Server 或 ODBC Driver 17 for SQL Server for Unix。它必须与 odbc.ini 文件中的值匹配。
-
你能解决吗?你能帮我吗:stackoverflow.com/questions/58365543/…
标签: python sql-server amazon-web-services aws-lambda pyodbc