python - 如何使用 Python 在 AWS Lambda 上运行 SQLAlchemy
问题描述
我为连接到外部 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 上的 localy 可以完美运行。
接下来,我安装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
。
那么,我现在应该怎么办?
解决方案
SQLAlchemy 包括许多用于各种后端的方言实现。SQLAlchemy 包含最常见数据库的方言;少数其他人需要额外安装单独的方言。
MySQL 方言使用 mysql-python 作为默认 DBAPI。有许多 MySQL DBAPI 可用,包括 MySQL-connector-python 和 OurSQL
而不是mysql
你可以使用mysql+mysqlconnector
sql = create_engine('mysql+mysqlconnector://root:root@127.0.0.1/scraper?charset=utf8')
然后使用:
pip install mysql-connector --target my/dir
创建 Zip 并再次上传到 AWS Lambda。
推荐阅读
- c++ - 如何在 Windows 上构建 Skia
- angular - 如何在 cpanel 上正确托管 Angular 应用程序?
- java - 在android中的custom-listview中查看问题
- python - 尽管设置正确,但媒体中的 Django 图像仍不显示
- r - 将一组行转换为R中的列
- r - 将 r 中的所有数字四舍五入,不带小数
- mysql - 如何根据列值添加标签
- apache-spark - spark的查询计划下如何
- extjs - 渲染后如何将商店添加到我的 ExtWebComponent 图表?
- apache2 - apache2 虚拟主机 html 页面链接转到默认页面