首页 > 解决方案 > 如何在 Django 中使用 bulk_update 方法保存对象列表?

问题描述

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

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 中使用 celery 任务运行我的脚本时,它有点崩溃。请帮助大家,如果有能够表明我的错误。我的最终目标是将我需要的所有对象添加到列表中并立即在数据库中更新它们,因为我有很多数据

标签: djangoperformanceorm

解决方案


假设您有一个带有名称字段的模型对象 Book,例如:

在模型中

class Book(models.Model):
    name = models.CharField(max_length=200, blank = True)

然后,如果您有创建书籍的名称列表:

book_list = [{"name":"A"},{"name":"B"},{"name":"C"}]

然后您所要做的就是将此列表(字典列表)传递给 Book() 以首先创建 Book 对象列表。然后最后一步是将这些对象保存到数据库使用

Book.objects.bulk_create(list of objects here)

看起来像:

objects = [] #list for Book objects

new_object = [] #list for new object to add to Book objects

for i in booklist:  #'booklist' is the list of bookname dictionaries
`new_object = Book(name = i['name']) #book objects with each name in` 


booklist
objects.append(new_object) #list of Book objects

#saving list of book objects created in the for loop
Book.objects.bulk_create(objects)

推荐阅读