一尘不染

在Python中将MySQL与AWS Lambda一起使用时出现问题

mysql

我正在尝试使用AWS Lambda
Python(Python初学者)启动并运行,但是在包含MySQL依赖项时遇到了一些问题。我试图按照指示在这里我的Mac上。

对于第3步,我在项目的根目录执行命令遇到一些问题

sudo pip install MySQL-python -t /

错误:

例外:追溯(最近一次通话最近):文件“ /Library/Python/2.7/site-
packages/pip-1.5.6-py2.7.egg/pip/basecommand.py”,行122,处于主要状态=自我.run(options,args)文件“
/Library/Python/2.7/site-
packages/pip-1.5.6-py2.7.egg/pip/commands/install.py”,第311行,位于运行os.path中。
join(options.target_dir,item)文件“
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py”,行292,在移动中引发错误,“目标路径’%s
‘已经存在“%real_dst错误:目标路径’/MySQL_python-1.2.5-py2.7.egg-
info/MySQL_python-1.2.5-py2.7.egg-info’已存在

我最终编写了以下lambda函数(在Mac上可以正常运行),该函数是:

import MySQLdb

def lambda_handler(event, context):
   # Open database connection
   db = MySQLdb.connect(...)

   # prepare a cursor object using cursor() method
   cursor = db.cursor()

   sql = "SELECT * FROM Users"

   try:
      # Execute the SQL command
      cursor.execute(sql)
      # Fetch all the rows in a list of lists.
      results = cursor.fetchall()
      for row in results:
         fname = row[0]
         lname = row[1]
         age = row[2]
         sex = row[3]
         income = row[4]
         # Now print fetched result
         print ("lname=%s" %(lname))
   except:
      print "Error: unable to fecth data"

   # disconnect from server
   db.close()

我要做的是转到/Library/Python/2.7/site-packages并复制我在sudo pip安装MySQL-
python时下载的MySQLdb文件夹/文件(不带-t
/)(我是确保我在这里对lambda项目做错了事,然后将内容与lambda_function.py一起压缩并上传到AWS Lambda。

然后我得到:

无法导入模块“ lambda_function”:没有名为MySQLdb的模块

感谢您的任何帮助和建议!

编辑

能够使sudo pip安装MySQL-python -t /
pathToProject工作(感谢注释中的帮助),但是现在我在运行lambda函数时得到了这个:

无法导入模块“ lambda_function”:/var/task/_mysql.so:无效的ELF标头

我知道如果我在Linux机器上工作,那么它应该可以正常工作(有人建议),但是我想知道是否可以在OS X机器上使它工作。


阅读 296

收藏
2020-05-17

共1个答案

一尘不染

对于像Lambda这样的用例,使用像PyMySQL这样的纯python实现会更快乐。

这是遵循Python数据库API规范的MySQLdb的替代品。对于大多数事件,例如触发的Lambda事件,速度将一样快。

我已经在生产中使用了很多,效果很好。

2020-05-17