2012-11-29 31 views
0

Django的草垛需要Django的草堆:更新只有一個字段

update_index

的執行,以用新數據更新Solr的索引,所以我一直在想,如果有更新的方式/只更改一個字段。

這一個領域必須有最新的數據 - 因爲它是一些喜歡。有沒有辦法使用從數據庫中檢索到的最新值來更新sqs字典中喜歡的值。我已經做了一個腳本,但它需要太長時間才能執行:

sqs = SearchQuerySet().all() 
d = Data.objects.all() 

l = [] 

for i in d: 
    l.append((i.id, i.like)) 

for i in sqs: 
    for j,k in d: 
     if i.id == j: 
      i.like = k 

也許有辦法加快速度呢?

謝謝!

回答

0

這裏是使用字典(查找複雜O(1)而不是O(n)查找對數組的複雜性),.only.filter方法簡單的優化:

d = Data.objects.all().only("id", "like") 
d = dict((o.id, o.like) for o in d) 

sqs = SearchQuerySet().filter(id__in = d.keys()).only("id", "like") 

for i in sqs: 
    i.like = d[ i.id ] 

需要注意的是更多的內存消耗,所以要確保查詢不太大(如果需要,將這個工作分成多個工作)。

爲了獲得更大的性能,您應該編寫直接的SQL腳本並在數據庫上運行它。