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