2010-03-24 36 views
1

我在數據庫中列出了一些項目,通過Reddit的算法訂購。這可以通過ORM來完成嗎? - Django

這是它:

def reddit_ranking(post): 
    t = time.mktime(post.created_on.timetuple()) - 1134000000 
    x = post.score 

    if x>0: y=1 
    elif x==0: y=-0 
    else: y=-1 

    if x<0: z=1 
    else: z=x 

    return (log(z) + y * t/45000) 

我不知道是否有使用Django的ORM,以更新模型散裝的任何聰明的辦法。

沒有這樣做:

items = Item.objects.filter(created_on__gte=datetime.now()-timedelta(days=7)) 
for item in items: 
    item.reddit_rank = reddit_rank(item) 
    item.save() 

我知道的F()對象,但我不能計算出,如果這個功能可以在ORM內部進行。


任何想法?

幫助將非常感謝!

回答

2

它沒有太多的工作做手工:

from django.db import connection 

items = Item.objects.filter(created_on__gte=datetime.now()-timedelta(days=7)) 
cursor = connection.cursor() 
cursor.executemany("UPDATE myapp_item SET reddit_rank = %s WHERE id = %s", 
        [(reddit_rank(item), item.pk) for item in items]) 
cursor.close() 
+0

@insin不是很熟悉的光標。非常感謝,我現在就試試看。 – RadiantHex 2010-03-24 18:08:22

+1

這比通過ORM做更有效嗎? OP真的想通過一個更新查詢來完成整個事情,但是您的方式仍然會爲每個項目調用一次'reddit_rank'。 – 2010-03-24 20:03:59