Django`bulse_create`与相关对象

时间:2016-11-24 15:24:20

标签: python django django-models bulkinsert

我有一个Django系统,定期为成千上万的客户运行计费。这是我的模特:

moment

运行结算时,使用多个嵌套.ts循环创建数千个具有数十个事务的发票,这些循环会触发每个已创建记录的插入。我可以针对每张单独的帐单运行class Invoice(models.Model): balance = models.DecimalField( max_digits=6, decimal_places=2, ) class Transaction(models.Model): amount = models.DecimalField( max_digits=6, decimal_places=2, ) invoice = models.ForeignKey( Invoice, on_delete=models.CASCADE, related_name='invoices', null=False ) ,但这仍会导致数千次调用for

如何批量创建数千个相关模型,以便维持关系并以最有效的方式使用数据库?

注意:

  • 我正在寻找适用于所有数据库的原生Django解决方案(可能除了SQLite)。
  • 我的系统在芹菜任务中运行计费,以将长时间运行的代码与活动请求分离,但我仍然担心完成结算周期需要多长时间。
  • 解决方案应该假设其他请求或正在运行的任务也在读取和写入相关表格。

1 个答案:

答案 0 :(得分:3)

您可以bulk_create所有Invoice个对象,从数据库中刷新它们,以便它们都有ID,为所有发票创建Transaction个对象,然后保存它们bulk_create。所有这些都可以在单个transaction.atomic上下文中完成。

另外,特别是对于django 1.10和postrgres,请看这个answer