Почему размер партии данных для цикла не работает для Insert API в python Django?
Мы используем сторонний API для получения данных и включили пагинацию, поэтому количество поступающих данных огромно. Иногда в списке одновременно 12000 записей.
Мы используем СУБД mySQL, и она не справляется, когда получает такое количество данных за раз. Поэтому в качестве временного решения я хотел реализовать концепцию "размера партии", как показано ниже:
batch_size = 3 for batch in range(0, len(payload), batch_size): batch_data = payload[batch:batch + batch_size]
Ниже приведен фрагмент кода метода POST, в котором мы получаем источник данных и его формат, а также то, как я его передаю.
def post(self, request):
data = fetch_data.get(request=request)
try:
if data.status_code == status.HTTP_200_OK:
payload = data.data
payload["token_id"] = token_id
payload["org"] = org
api_log(
msg=f"TOtal cont data from xyz : {json.dumps(payload)}"
)
api_log(
msg=f"Size of cont data from xyz : {len(json.dumps(payload))}"
)
api_log(
msg=f"Length of cont data to db: {len(payload)}"
)
api_log(
msg=f"Total cont data to DB: {payload}"
)
url = ("http://example.com")
batch_size = 3
api_log(msg=f"[BATCH SIZE]:: {batch_size}")
for batch in range(0, len(payload), batch_size):
api_log(msg=f"[BATCH SIZE]:: {batch_size}")
api_log(msg=f"[BATCH]:: {batch}")
batch_data = payload[batch:batch + batch_size]
api_log(msg=f"[BATCH DATA]:: {batch_data}")
response_data = requests.post(
url,
json=batch_data,
)
if response_data.status_code == status.HTTP_201_CREATED:
api_log(
msg="data inserted successfully"
)
return Response(
{"message": "API Info completed successfully"}
)
else:
return Response(
{"error": "Failed to send data "},
status=status.HTTP_500_INTERNAL_SERVER_ERROR,
)
Моя проблема заключается в том, что когда я реализую концепцию размера партии, она выдает ошибку 500, как показано ниже:
Exception for module : API failed with status code 500
Однако если я удалю эту логику пакетного размера, данные попадают в requests.post() и я получаю сообщение об успехе.
В моей среде dev у нас меньше данных, может быть менее 100 записей. Поэтому "размер страницы" я взял 20, специально для этого, так как в источнике данных всего 50 строк, как я мог проверить в postman.
Итак, опять же, я взял размер страницы 20, поэтому у меня получится 3 страницы(20, 20, 10), а размер партии я взял 3.
Ниже приведен пример JSON-запроса.
{
"xyz": [
{
"id": "45435345",
"r_id": "sdgvrtrvrt",
"name": "Furniture"
}
],
"r_data": [
{
"Name": "Furniture",
"Phones": 5123523
}
]
}
Пожалуйста, предложите. Спасибо