超过mysql中允许的最大\u包时查询django模型

rslzwgfq  于 2021-06-19  发布在  Mysql
关注(0)|答案(0)|浏览(270)

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

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题