这可以通过ORM来完成吗? - Django
问题描述:
我在数据库中列出了一些项目,通过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内部进行。
任何想法?
帮助将非常感谢!
答
它没有太多的工作做手工:
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()
@insin不是很熟悉的光标。非常感谢,我现在就试试看。 – RadiantHex 2010-03-24 18:08:22
这比通过ORM做更有效吗? OP真的想通过一个更新查询来完成整个事情,但是您的方式仍然会为每个项目调用一次'reddit_rank'。 – 2010-03-24 20:03:59