2010-03-24 9 views
1

데이터베이스에 나열된 몇 가지 항목이 있습니다 (Reddit의 알고리즘).ORM으로이 작업을 수행 할 수 있습니까? - Django

이 그것입니다 : 대량으로 모델을 업데이트하기 위해, 장고의 ORM를 사용하는 어떤 영리한 방법이 있는지 궁금 해요

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) 

. 이 일을하지 않고

:

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

+1

ORM을 사용하는 것보다이 방법이 더 효율적입니까? OP는 하나의 업데이트 쿼리를 통해 모든 것을 정말로하고 싶었지만, 여전히 모든 항목에 대해'reddit_rank'를 한 번만 호출합니다. –

관련 문제