【发布时间】:2012-05-21 19:12:57
【问题描述】:
哪个性能更好?
我们取一片产品。这使我们无法批量更新。
products = Product.objects.filter(featured=True).order_by("-modified_on")[3:]
for product in products:
product.featured = False
product.save()
或(无效)
罢工>
for product in products.iterator():
product.update(featured=False)
我也试过QuerySet的in语句如下。
Product.objects.filter(pk__in=products).update(featured=False)
这一行在 SQLite 上运行良好。但是,它在 MySQL 异常之后上升。所以,我不能用那个。
DatabaseError: (1235, "这个版本的 MySQL 还不支持 'LIMIT & IN/ALL/ANY/SOME 子查询'")
编辑: iterator() 方法也会导致重新评估查询。所以,这对性能不利。
【问题讨论】:
-
你真正想要达到什么目的?你的第二个代码块没有意义。
iterator默认不存在,这是你添加的吗?而且,一个实例没有update方法,所以,这是你添加的吗? -
我的开发环境:Ubuntu 12.04、Python 2.7、Django 1.4、MySQL 5.5.22、python-mysqldb 1.2.3
-
这不是你被问到的。
-
其实我还没有实现迭代器和更新方法。它们带有 Django 框架的核心。
-
好的。我错过了
iterator(),但instance 上仍然没有update方法。这仅在查询集上可用。
标签: django django-models django-queryset