AWS Lambda python库函数错误

时间:2018-01-31 20:37:51

标签: python python-3.x amazon-web-services aws-lambda pymysql

我正在尝试使用AWS Lambda连接到AWS RDS。我将PyMySQL安装到目录中,并使用下面的代码和库

构建包
import sys
import pymysql

def lambda_handler(event, context):
    string=""
    try:
            connection = pymysql.connect(host='',
                                            user='',
                                            password='',
                                            db='',
                                            charset='',
                                            cursorclass=pymysql.cursors.DictCursor)
            cur = connection.cursor(pymysql.cursors.DictCursor)
            cur.execute("select * from table")
            for row in cur:
                    print(row['col'])
                    string+=row['col']
    except Exception as e:
            print("MySQL error: %s" % (e.args[0]))

    return string

print(lambda_handler("",""))

在我的机器中,上面的代码可以使用,但在AWS中,它会显示

  

MySQL错误:模块'pymysql'没有属性'connect'

我检查过pymysql只在包含代码的目录中可用,所以我不知道为什么我无法使用connect方法。 两个Python版本都是一样的。

编辑:

Traceback (most recent call last):
  File "/var/task/lambda.py", line 7, in lambda_handler
    connection = pymysql.connect(host='',
AttributeError: module 'pymysql' has no attribute 'connect'

2 个答案:

答案 0 :(得分:1)

尝试zip -r package.zip *

我怀疑你只是压缩pymysql模块的顶层,而不是其子目录的内容

用于上传到lambda的AWS文档很差。

答案 1 :(得分:0)

  1. 首先在本地计算机上创建一个目录,例如:“ package-dir”

  2. 现在将pymlsql安装到您创建的目录路径“ pip install pymlsql -t path / to / package-dir”

  3. 将python脚本粘贴到同一目录

  4. 选择目录中的所有项目并创建一个zip文件。不要压缩目录本身,这很重要

  5. 在lambda中上传zip文件,它应该可以工作

  6. 还可以看到处理程序名称是“ python_script_name.lambda_handler”。 例如:如果您的脚本文件名为“ lambda_function.py”,则您的处理程序应为“ lambda_function.lambda_handler”