Django中使用get_or_create()进行批量插入的高效方法 (SQL, Python, Django)
有没有更有效的方法来做到这一点?
for item in item_list:
e, new = Entry.objects.get_or_create(
field1 = item.field1,
field2 = item.field2,
)
5 个回答
1
从1.4版本开始,你可以使用bulk_create这个功能。
可以查看官方文档了解更多信息。
*不过要注意一些注意事项,最重要的一点是,模型的save()方法不会被调用,因此pre_save和post_save的信号也不会被发送。*
11
使用 get_or_create(或者 create)来进行大量插入数据是不太行的,而且没有简单的方法可以做到这一点。
如果你的表格结构比较简单,直接用原始 SQL 来创建数据行也不会太麻烦,其实也不难;可以像这样做:
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")
,你需要自己创建并确保格式正确。