所以我有这个周期性的任务,每月向用户发送一份自动报告。我在生成报告数据时遇到的问题是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()
。