【发布时间】:2018-05-20 20:21:02
【问题描述】:
很长一段时间以来,我一直在尝试使用 AWS Lambda 函数连接到 SQL Server。
为此,我尝试使用任何库(尝试使用 pyodbc、pypyodbc 等),将所有内容打包成 zip 文件并上传代码。
每个库的代码几乎相同,但错误不同。
代码:
import pypyodbc
def lambda_handler(event, context):
conn = pypyodbc.connect('DRIVER={SQL Server};'
'SERVER=1.1.1.1;'
'DATABASE=dbname;'
'UID=user;'
'PWD=pwd')
cur = conn.cursor()
cur.execute("SELECT * FROM Table")
item_count = 0
for row in cur:
item_count += 1
print(item_count)
cur.close()
conn.close()
return item_count
我讨论过的常见问题: - 我将项目内容添加到 zip 中,而不是文件夹。 - 我还将代码运行所需的库添加到 zip 文件中。
如果我尝试使用 pyodbc,我上传的 zip 如下所示:
.idea (dir)
pyodbc (dir)
lambda_function.py
pyodbc.pyd
我得到的错误:
Unable to import module 'lambda_function': No module named pyodbc
在搜索了很长一段时间后,我找不到任何有用的东西。只有一条评论说 pyodbc 需要安装在 linux 环境中才能使 lambda 函数工作。但是我没有那个环境可用,我也不知道这是否能解决这个问题。
如果我尝试使用 pypyodbc,我上传的 zip 文件如下所示:
我得到的错误:
module initialization error: 'ODBC Library is not found. Is LD_LIBRARY_PATH set?'
为此,我尝试安装其他 stackoverflow 帖子(python-pyodb、unixodbc)建议的多个 python 包,但每次都失败。
然后有一条评论说“确保将本机 ODBC 库放在 zip 部署包中的 lib 文件夹下”
也许这有点帮助?我不知道如何获取本机 ODBC 库..
哦,还有最后一件事。如果我从本地机器运行它们,这两个库都可以工作。我可以访问目标服务器。如果我从 lambda 函数中执行此操作,它会失败。
希望有人可以帮助我,显然,整个互联网。
【问题讨论】:
-
您可以创建一个 ec2-instance 并创建虚拟环境并安装所有依赖项并将它们压缩。并尝试使用该 zip 文件进行安装。
-
我看看能不能试试。这是我剩下的唯一方法,但我试图避免它。谢谢乌斯曼。
-
@EmilianoRodriguez 我遇到了同样的问题。 Usman Azhar 的评论真的是你必须求助的,还是有更好的方法?
-
我在一个项目中测试此功能,但我们放弃了尝试实现此方法并转向其他事情。如果我没记错的话,我一直在尝试构建要上传的包,但无法实现。我最好的尝试是在 linux 机器上构建包。前几天这部分有一条新评论,也许你应该看看它是否有帮助。
标签: python sql-server amazon-web-services aws-lambda