所以我有一个定期的任务,每月给用户发送一个自动报告。生成报表数据时遇到的问题是 MySQL DB
每个用户都有大量的报表数据,所以当我试图查询用户模型时 OperationalError: (1153, "Got a packet bigger than 'max_allowed_packet' bytes")
.
我进了监狱 dbshell
并检查该变量的设置是什么,它是允许的最大值(1GB)。
所以我基本上被困在这里了。有没有什么方法可以在不点击的情况下获取所有数据 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
.
我也试着像这样把queryset分开-
slices = []
step = 1000
while True:
sliced_queryset = users[step-1000:step]
slices.append(sliced_queryset)
step += 1000
if sliced_queryset.count() < 1000:
break
但我也犯了同样的错误 .count()
.
暂无答案!
目前还没有任何答案,快来回答吧!