Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AWS Lambda Python与MySQL_Python_Mysql_Aws Lambda - Fatal编程技术网

AWS Lambda Python与MySQL

AWS Lambda Python与MySQL,python,mysql,aws-lambda,Python,Mysql,Aws Lambda,我正在尝试从AWS Lambda脚本连接到mysql。我确实安装了pip——允许外部mysql连接器python mysql连接器python-t 在本地目录中安装mysql连接器python。 我压缩了文件并将其上载到AWS Lambda,在那里执行python文件。 在初始化mysql连接之前,我的脚本正在正确执行。 我有这个 log('about to set connection for db') connection = mysql.connector.connect(user=DB_

我正在尝试从AWS Lambda脚本连接到mysql。
我确实安装了pip——允许外部mysql连接器python mysql连接器python-t
在本地目录中安装mysql连接器python。
我压缩了文件并将其上载到AWS Lambda,在那里执行python文件。
在初始化mysql连接之前,我的脚本正在正确执行。
我有这个

log('about to set connection for db')
connection = mysql.connector.connect(user=DB_USER, password=DB_PASSWORD, host=DB_HOST, database=DB_DATABASE)
query = "SELECT * FROM customers WHERE customer_email LIKE '%s' LIMIT 1"
log('set connection for DB')
正在记录“即将为数据库设置连接”,但从未记录“为数据库设置连接”,并且我的程序遇到超时并停止执行。

我可能做错了什么

编辑: 这是我从lambda_function.py调用的类

import mysql.connector
import logging
from mysql.connector import errorcode

class MySql( object ):

    USER    =None
    PASSWORD=None
    HOST    =None
    DATABASE=None


    logger = logging.getLogger()
    logger.setLevel( logging.INFO )

    def __init__(self, user, password, host, database):
        global USER, PASSWORD, HOST, DATABASE
        USER        = user
        PASSWORD    = password
        HOST        = host
        DATABASE    = database

    def getId( self, customer_email ):
        email_exists = False

        connection = mysql.connector.connect(user=USER, password=PASSWORD, host=HOST, database=DATABASE)
        query = "SELECT * FROM customers WHERE customer_email LIKE '%s' LIMIT 1"

        cursor = connection.cursor()
        cursor.execute( query % customer_email )
        data = cursor.fetchall()
        id = None
        for row in data :
            id = row[1]
            break

        cursor.close()
        connection.close()
        return id

    def insertCustomer( self, customer_email, id ):
        log('about to set connection for db')
        connection = mysql.connector.connect(user=USER, password=PASSWORD, host=HOST, database=DATABASE)
        log('set connection for DB')
        cursor = connection.cursor()
        try:
            cursor.execute("INSERT INTO customers VALUES (%s,%s)",( customer_email, id ))
            connection.commit()
        except:
            connection.rollback()
            connection.close()
    def log( logStr):
        logger.info( logStr )

def main():
    user = 'xxx'
    password = 'xxx'
    host = ' xxx'
    database = 'xxx'

    mysql = MySql( user, password, host, database )

    id = mysql.getId('testing')
    if id == None:
        mysql.insertCustomer('blah','blahblah')
    print id

if __name__ == "__main__":
    main()

当我在本地执行MySql.py时,我的代码工作正常。
我的数据库得到更新,但当我从AWS运行它时,什么也没有发生。

它是AWS(RDS)上的MySql实例还是本地数据库?如果是RDS,请检查与您的DB实例关联的vpc的入站规则。当您创建zip文件时,入站规则可以允许/拒绝来自特定IP源的数据。您是否对目标目录执行了pip。 我附上了下面的语法。这会将文件复制到您的目标目录以进行压缩

这可能是您能够在本地执行它而不能在lambda中执行它的原因

这就是语法


pip install module name-t/path/to/pythonnemperdir

可能是您的
主机
值错误,这可能导致网络超时。另外,
日志
函数做什么,您能显示它的代码吗?这可能是问题所在。检查安全组。这是我发现的。是的。我不得不改用DynamoDB。