首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Django中使用get_or_create()进行大容量插入的有效方法

在Django中使用get_or_create()进行大容量插入的有效方法
EN

Stack Overflow用户
提问于 2010-02-12 22:44:31
回答 5查看 24.4K关注 0票数 24

有没有更有效的方法来做到这一点?

代码语言:javascript
复制
for item in item_list:
    e, new = Entry.objects.get_or_create(
        field1 = item.field1,
        field2 = item.field2,
    )
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-02-13 03:13:54

您不能使用get_or_create (甚至是create)进行像样的批量插入,而且也没有可以轻松做到这一点的应用编程接口。

如果您的表足够简单,使用原始SQL创建行并不是一件很麻烦的事情,那么它就不会太难;例如:

代码语言:javascript
复制
INSERT INTO site_entry (field1, field2)
(
         SELECT i.field1, i.field2
         FROM (VALUES %s) AS i(field1, field2)
         LEFT JOIN site_entry as existing
                 ON (existing.field1 = i.field1 AND existing.field2 = i.field2)
         WHERE existing.id IS NULL
)

其中%s是一个类似于("field1, field2"), ("field3, field4"), ("field5, field6")的字符串,您必须自己创建并正确转义。

票数 10
EN

Stack Overflow用户

发布于 2010-02-12 22:48:23

这取决于你的目标是什么。您可以使用manage.pyloaddata函数以适当的格式(JSON、XML、YAML等)加载数据。

另请参见this discussion

票数 4
EN

Stack Overflow用户

发布于 2013-03-09 19:44:02

从1.4开始,您可以使用bulk_create

请参阅the docs

*注意注意事项(最重要的一点是不会调用模型的save()方法,因此不会发送pre_save和post_save信号)*

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2252530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档