如何使用 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 函数中安装外部模块?