TIM*_*MEX 34 python mysql database django
myqueryset = Content.objects.filter(random 100)
Run Code Online (Sandbox Code Playgroud)
Tom*_*Tom 65
Content.objects.all().order_by('?')[:100]
Run Code Online (Sandbox Code Playgroud)
请参阅order_by文档.还要注意这种方法不能很好地扩展(事实上,它实际上非常非常严重地扩展).请参阅此SO答案,以便在有大量数据时更好地处理随机选择.
S.L*_*ott 10
如果您要多次执行此操作,则需要将其设计到数据库中.
如果你这样做一次,你可以支付高额罚金.这可以让你获得100个非常好的随机属性.但是,它使用了大量内存.
pool= list( Content.objects.all() )
random.shuffle( pool )
object_list = pool[:100]
Run Code Online (Sandbox Code Playgroud)
这是另一种算法也很慢,因为它可能会搜索整个表格.它根本不使用很多内存,它可能不会完全达到100.
total_count= Content.objects.count()
fraction = 100./total_count
object_list = [ c for c in Content.objects.all() if random.random() < fraction ]
Run Code Online (Sandbox Code Playgroud)
如果您想多次执行此操作,则需要向Content添加属性以允许对"随机"值进行有效过滤.例如,您可以这样做.
class Content( models.Model ):
... etc. ...
def subset( self ):
return self.id % 32768
Run Code Online (Sandbox Code Playgroud)
这会将您的数据划分为32768个不同的子集.每个子集是数据的1/32768.要获得100个随机项,您需要100*32768/total_count数据子集.
total_count = Content.objects.count()
no_of_subsets= 100*32768/total_count
object_list = Content.objects.filter( subset__lte=no_of_subsets )
Run Code Online (Sandbox Code Playgroud)
这很快,而且可以重现.子集是"任意的"而不是技术上"随机".
| 归档时间: |
|
| 查看次数: |
16954 次 |
| 最近记录: |