【问题标题】:Strategies for speeding up batch ORM operations in Django在 Django 中加快批量 ORM 操作的策略
【发布时间】:2010-09-24 09:33:01
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: python django batch-file orm


    【解决方案1】:

    您链接到的票证用于批量创建 - 如果您不依赖覆盖的 save 方法或保存前/后保存信号来做一些保存工作,QuerySet has an update method 您可以使用它来执行UPDATE 在过滤的行上:

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

    【讨论】:

    • 很好,看起来它会涵盖很多情况。会试一试的。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-11
      • 1970-01-01
      • 1970-01-01
      • 2022-01-15
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多