Запрос модели Django при превышении max_allowed_packet в MySQL - PullRequest
0 голосов
/ 22 октября 2018

Итак, у меня есть эта периодическая задача - отправлять пользователю автоматический отчет каждый месяц.Проблема, с которой я столкнулся при создании данных отчета, заключалась в том, что MySQL DB имеет тонны данных отчета для каждого пользователя, поэтому при попытке выполнить запрос по модели User я получаю OperationalError: (1153, "Got a packet bigger than 'max_allowed_packet' bytes").

зашел в dbshell и проверил, какая настройка для этой переменной, и это максимально допустимое значение (1 ГБ).

Так что я в основном застрял здесь.Есть ли способ получить все данные, не нажимая на это OperationalError?

Код выглядит следующим образом (я ввел фиктивные имена, поскольку не могу раскрыть информацию о компании) -

user_ids = list(Model1.objects.filter(param=param_value).values_list('user_id', flat=True)) # returns 143992 user_ids
users = User.objects.filter(user_id__in=user_ids)

Затем я пытаюсь перебрать users, но я нажал OperationalError.

Я также попытался разделить набор запросов так -

slices = []
step = 1000
while True:
    sliced_queryset = users[step-1000:step]
    slices.append(sliced_queryset)
    step += 1000
    if sliced_queryset.count() < 1000:
        break

Но я столкнулся с той же ошибкой для .count().

...