gpt4 book ai didi

python - Django `bulk_create` 及相关对象

转载 作者:太空宇宙 更新时间:2023-11-03 10:55:57 33 4
gpt4 key购买 nike

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

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 循环创建包含数十笔交易的数千张发票,这会触发对每个创建的记录的插入。我可以对每张发票的交易运行 bulk_create(),但这仍然会导致对 bulk_create() 的数千次调用。

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

注意事项:

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

最佳答案

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

此外,特别针对 django 1.10 和 postrgres,请看这个 answer .

关于python - Django `bulk_create` 及相关对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40789962/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com