我正在生成一批客户的电话号码。我有一个大的(25m+)订阅者对象表,我正在搜索以查找匹配的记录,然后通过 Django 的 ForeignKey 关系查找每个对象的数字(订阅者对象有一个到 Customer 对象的 ForeignKey,然后有一个包含数字的 CharField)。对于大型查询集,我在批次中得到重复的数字。在大约 110k 订阅者的列表中,我得到了大约 5k 重复。
我正在使用一个直截了当的过滤器生成初始 QuerySet:
subscribers = Subscribers.objects.filter(foo='bar')
这就是我生成批次的方式:
batches = [
[s.customer.number for s in subscribers[x:x + batch_size]]
for x in xrange(0, subscriber_count, batch_size)
]
当我在 shell 中测试这个方法时,它工作得很好;只有在生产中它才会失败。它也适用于生产中较小的 QuerySet。只有大约 50k+ 的 QuerySet 似乎有问题。此外,当我尝试从 QuerySet 创建订阅者对象列表时,一切正常:
print list(subscribers)
即使在生产中也能正常工作。所以看起来像
s.customer.number
有时会以某种方式查找错误,但仅适用于大型查询集。