Django:我可以通过单个方法调用将新模型实例列表添加到数据库吗?
Posted
技术标签:
【中文标题】Django:我可以通过单个方法调用将新模型实例列表添加到数据库吗?【英文标题】:Django: can I add a list of new model instances to the database via a single method call? 【发布时间】:2011-09-20 10:48:37 【问题描述】:如果我基于某些表单输入创建新模型对象列表,例如,
new_items = []
for name, value in self.cleaned_data.items():
if name.startswith('content_item_'):
new_items.append(ContentItem(item=value))
# can I add the entire new_items list to the database in one swoop?
我在文档中找不到这是否存在问题,这通常是指通过 .save() 方法一次创建一个对象。但是,当您要添加一整套对象时,一次一个似乎效率低下。
谢谢!
【问题讨论】:
【参考方案1】:https://docs.djangoproject.com/en/dev/ref/models/querysets/#bulk-create
编辑:不幸的是,这不在 1.3 上
原答案
感谢上帝bulk_create
!
然后你可以这样做:
ContentItem.objects.bulk_create(new_items)
对于那些懒得点击链接的人,这里是文档中的示例:
>>> Entry.objects.bulk_create([
... Entry(headline="Django 1.0 Released"),
... Entry(headline="Django 1.1 Announced"),
... Entry(headline="Breaking: Django is awesome")
... ])
【讨论】:
【参考方案2】:我相信 Brandon Konkle 对类似问题的回复仍然有效:Question about batch save objects in Django
总结:遗憾的是,不,您必须使用 django.db.cursor 和手动查询来执行此操作。如果数据集很小,或者性能不太重要,那么循环并不是那么糟糕,而且是最简单的解决方案。
另外,请看这张票:https://code.djangoproject.com/ticket/661
【讨论】:
以上是关于Django:我可以通过单个方法调用将新模型实例列表添加到数据库吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Django Rest Framework 创建多个模型实例?