Итак, у меня есть эта периодическая задача - отправлять пользователю автоматический отчет каждый месяц.Проблема, с которой я столкнулся при создании данных отчета, заключалась в том, что 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()
.