0

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

4

0 回答 0