在Django中使用get_or_create()批量插入的有效方法(SQL,Python,Django)

kem*_*mar 22 python django bulkinsert

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

for item in item_list:
    e, new = Entry.objects.get_or_create(
        field1 = item.field1,
        field2 = item.field2,
    )
Run Code Online (Sandbox Code Playgroud)

Gle*_*ard 10

您无法使用get_or_create(甚至是create)进行体面的批量插入,并且没有用于轻松执行此操作的API.

如果你的表很简单,用原始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
)
Run Code Online (Sandbox Code Playgroud)

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