Почему размер партии данных для цикла не работает для 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
        }
    ]
}

Пожалуйста, предложите. Спасибо

Вернуться на верх