如何在Django中使用bulk_update方法保存对象列表?

时间:2019-09-26 10:55:16

标签: django performance orm

我有一个循环遍历对象并将其添加到列表中

for note in notes:
             old_note = Note(
                        user_id=note['id']),
                        author=note['author'],         
                    )
                    existing_notes.append(old_note)
 Worklog.objects.bulk_update(
                existing_notes,
                [
                    'user_id',
                    'author',
                ],
                batch_size=1000)

但是它没有按照我希望的那样工作。当我在django中用芹菜任务运行脚本时,有点崩溃。请帮帮我,如果有能力表明我的错误。 我的最终目标是将我需要的所有对象添加到列表中,并立即在数据库中更新它们,因为我确实有很多数据

1 个答案:

答案 0 :(得分:0)

如果要创建新对象,则应使用bulk_create而不是bulk_update

bulk_update将尝试查找和更新现有对象,但是当您通过实例化其类来创建对象时,就像使用Note(...)一样,它尚未保存到数据库中。因此,这就是您遇到错误的原因。

此外,您正在使用冲突的模型。您创建了Notes的列表,但是尝试通过Worklog更新它们。 两者都使用NoteWorklog

您更新的代码应如下所示:

for note in notes:
             old_note = Note(
                        user_id=note['id']),
                        author=note['author'],         
                    )
                    existing_notes.append(old_note)

 Note.objects.bulk_create(
                existing_notes,
                batch_size=1000)