在Django中加速批量ORM操作的策略

时间:2008-11-27 23:01:18

标签: python django batch-file orm

我的一个API调用可能导致对大量对象(Django模型)的更新。由于我正在单独更新每个项目,保存并继续下一个项目,因此我遇到了性能问题:

for item in Something.objects.filter(x='y'):
    item.a="something"
    item.save()

有时我的过滤条件看起来像“x in('a','b','c',...)”。

似乎official answer to this is "won't fix"。我想知道人们在这些场景中使用什么策略来提高性能。

2 个答案:

答案 0 :(得分:15)

您链接的票证用于批量创建 - 如果您不依赖于被覆盖的save方法或前/后保存信号来执行保存工作,QuerySet has an update method您可以用于对筛选的行执行UPDATE

Something.objects.filter(x__in=['a', 'b', 'c']).update(a='something')

答案 1 :(得分:1)

您需要手动使用事务或创建sql语句。您也可以尝试使用SQLAlchemy,它支持一些很棒的ORM功能,如工作单元(或应用程序事务)。

Django交易:http://docs.djangoproject.com/en/dev/topics/db/transactions/?from=olddocs

SQLAlchemy:http://www.sqlalchemy.org/