如何使用 Python 在 AWS Lambda 上运行 SQLAlchemy

Posted

技术标签:

【中文标题】如何使用 Python 在 AWS Lambda 上运行 SQLAlchemy【英文标题】:How to run SQLAlchemy on AWS Lambda in Python 【发布时间】:2019-07-02 05:06:31 【问题描述】:

我为连接外部 mysql 数据库服务器准备了一个非常简单的文件,如下所示:

from sqlalchemy import *

def run(event, context):
    sql = create_engine('mysql://root:root@127.0.0.1/scraper?charset=utf8');
    metadata = MetaData(sql)

    print(sql.execute('SHOW TABLES').fetchall())

无法在 AWS 上运行,但在 Windows 上本地运行完美。

接下来,我通过pip install sqlalchemy --target my/dir 安装并准备 ZIP 文件以将包上传到 AWS Lambda。

运行,但显示失败消息No module named 'MySQLdb': ModuleNotFoundError

然后,我使用pip install mysqlclient --target my/dir,创建 ZIP 并再次上传到 AWS Lambda。

运行,但出现新的失败消息cannot import name '_mysql': ImportError

那么,我现在该怎么办?

【问题讨论】:

可能缺少 MySQL 客户端库。 python 库 afaik 是 C 实现的包装器。 可以安装吗? 【参考方案1】:

SQLAlchemy 包含许多适用于各种后端的方言实现。 SQLAlchemy 包含最常见数据库的方言;一种 少数其他人需要额外安装单独的方言。

MySQL 方言使用 mysql-python 作为默认 DBAPI。有 许多 MySQL DBAPI 可用,包括 MySQL-connector-python 和 我们的SQL

你可以使用mysql+mysqlconnector代替mysql

sql = create_engine('mysql+mysqlconnector://root:root@127.0.0.1/scraper?charset=utf8')

然后使用:

pip install mysql-connector --target my/dir

创建 Zip 并再次上传到 AWS Lambda。

【讨论】:

我通常实例化'db = SQLAlchemy()',然后使用 db.session,知道在这种情况下如何工作吗? 是否应该将其作为layer 包含在内?还是功能代码本身?

以上是关于如何使用 Python 在 AWS Lambda 上运行 SQLAlchemy的主要内容,如果未能解决你的问题,请参考以下文章

如何在 AWS Lambda 中使用 Python 自定义包

我如何使用 aws lambda 将文件写入 s3 (python)?

如何在 Python 中从 AWS 中的 lambda 函数返回二进制数据?

如何在 AWS CDK 创建的 Python Lambda 函数中安装外部模块?

如何使用 Python 3.6 将 pymysql 模块安装到 AWS Lambda [重复]

在单个AWS Lambda中使用两个python函数boto3