问题描述
https://docs.djangoproject.com/en/3.1/topics/db/examples/many_to_one/,
以Django的Reporter / Article作为我的实际问题的可比示例,我需要为我的查询集中的每个记者创建一篇新文章。
我现在的方法如下:
reporters = Reporter.objects.filter(...)
for reporter in reporters:
article = Article()
article.reporter = reporter
...
article.save()
问题是我有25,000个“报告者”,因此处理请求花的时间太长,并且超时。
我想知道是否有更好的方法,例如:
Reporter.objects.filter(...).article_set.create(...)
解决方法
我认为您的情况下最好的解决方案是bulk_create()
。
类似这样的东西:
reporters = Reporter.objects.filter(...)
articles = []
for reporter in reporters:
article = Article(reporter=reporter)
...
articles.append(article)
Article.objects.bulk_create(articles)
这将使您不进行25k数据库查询。
,您应该尝试执行以下操作:
reporters = Reporter.objects.filter(...)
for reporter in reporters:
Article.objects.create(reporter=reporter,....)
这应该更有效,但不确定是否能解决您的问题。如果不需要,则可能需要批量处理。