Лямбда-функция не возвращает все строки из MySQL - PullRequest
0 голосов
/ 22 апреля 2019

Я пытаюсь создать простую лямбда-функцию AWS, чтобы получить несколько строк из Amazon RDS (MySQL db) и вернуть ее в формате json.

Если я пытаюсь добавить экземпляр объекта, то получаю ошибкуэтот объект типа XXX не сериализуем.Если я сделаю что-то вроде ниже, я получу только последнюю запись из БД.(Это не похоже на то, что показано в 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 (). У меня 4 записи в таблице tblEmployeesВыходные данные выше получают 4 записи в результате, но все четыре записи одинаковы (и соответствуют последней записи в БД). Json.dumps () не работал, так как данные в формате Unicode. Iя уже пробовал .toJSON () и byteify (), и это не сработало. Любая помощь?

1 Ответ

0 голосов
/ 22 апреля 2019

Вам следует заново создать данные, чтобы избежать переопределения старых значений:

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