Краткая справка: у меня есть безсерверная база данных mysql, подключенная к AWS RDS, которая состоит из 70 столбцов и 7000+ строк. Многие столбцы, определенные в этой RDS, имеют тип данных VARCHAR(2000), BIGINT
.
. Я пытаюсь вернуть все детали в этой базе данных, используя AWS Lambda API, ниже приведен фрагмент кода функции-обработчика. что я использую для достижения того же:
def handler(event, context):
try:
#Storing data to be returned
dataReturn=[]
#Insert Data into Database
with conn.cursor() as cur:
cur.execute("SELECT <names of all 70 columns> FROM <table_name>" )
row_headers=[x[0] for x in cur.description] #this will extract row headers
rv = cur.fetchall()
json_data=[]
for result in rv:
json_data.append(dict(zip(row_headers,result)))
#print(json.dumps(json_data))
conn.commit()
return {
'statusCode': 200,
'headers': {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": 'GET, POST, PUT, DELETE, OPTIONS'
},
'body': json.dumps(json_data, cls=DecimalEncoder)
}
except Exception:
print(traceback.format_exc())
return {
'statusCode': 502,
'headers': {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": 'GET, POST, PUT, DELETE, OPTIONS'
},
'body': json.dumps("Server Error Occured", cls=DecimalEncoder)
}
Однако, когда я запускаю это, я получаю «502 ошибку сервера» со следующими журналами:
Traceback (most recent call last):
File "/var/task/getInstrumentsDetails.py", line 55, in handler
print(json.dumps(json_data))
File "/var/lang/lib/python3.7/json/__init__.py", line 231, in dumps
return _default_encoder.encode(obj)
File "/var/lang/lib/python3.7/json/encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/var/lang/lib/python3.7/json/encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "/var/lang/lib/python3.7/json/encoder.py", line 179, in default
raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type Decimal is not JSON serializable
Как sidenote, я могу вернуть 24 столбца из этой таблицы, используя: SELECT <name_of_25_columns> FROM <table_name>
, но произойдет сбой, если я попытаюсь отобразить более 24 столбцов.
Эта проблема связана с объемом памяти, который AWS Лямбда может читать / возвращать из RDS? Пожалуйста, предложите подходящее решение этой проблемы.
Спасибо