Lambda函数不会从MySQL返回所有行

时间:2019-04-22 14:09:35

标签: python lambda unicode

我正在尝试创建一个简单的AWS Lambda函数,以从Amazon RDS(MySQL db)中获取几行并以json格式返回。

如果我尝试附加对象实例,则会收到错误消息,指出XXX类型的对象不可json序列化。如果我做下面的事情,那么我只会从数据库中获得最新的条目。 (这与https://hackersandslackers.com/create-a-rest-api-endpoint-using-aws-lambda/中显示的内容不同)。

def save_events(event):
    result = []
    conn = pymysql.connect(rds_host,user=name,passwd=password,db=db_name,connect_timeout=5)
    with conn:
        cur = conn.cursor()
        cur.execute("select * from tblEmployees")
        rows = cur.fetchall()
        for row in rows:
            employee = Employee(row)
            data['Id'] = employee.id
            data['Name']= employee.name
            result.append(data)
    return result

def main(event, context):
    data = save_events(event)
    return {
        "StatusCode":200,
        "Employee": data
    }

我知道变量“ data”的内容会更改运行时,并且会影响result.append()。我在表tblEmployees中有4个条目。上面的输出在结果中获得4个条目,但是所有四个条目都是相同的(并且等于db中的最新记录)。 json.dumps()无效,因为数据为unicode格式。我已经尝试过.toJSON()和byteify(),但是它没有用。 有帮助吗?

1 个答案:

答案 0 :(得分:0)

您应该重新创建数据,以避免覆盖旧值:

for row in rows:
    employee = Employee(row)
    data = new Dict(Id=employee.id, Name=employee.name)
    result.append(data)