因此,我有这个定期的任务,每个月向用户发送自动报告。生成报告数据时遇到的问题是MySQL DB
拥有每个用户的大量报告数据,因此当我尝试在User模型上进行查询时,会得到OperationalError: (1153, "Got a packet bigger than 'max_allowed_packet' bytes")
。
我进入dbshell
并检查该变量的设置是什么,它是最大允许值(1 GB)。
所以我基本上被困在这里。有没有什么方法可以获取所有数据而不会碰到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()
的相同错误。