我有一个镜像外部数据源的模型,有时外部数据会更改旧记录。我想从外部数据中批量创建对象以提高速度,但我找不到任何关于更新重复字段的文档。
示例模型:
class Author(models.Model):
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
class Book(models.Model):
author = models.ForeignKey('Author')
title = models.CharField(max_length=255)
price = models.FloatField() # Sometimes changes
class Meta:
unique_together = ('author', 'title')
在创建循环中运行它非常慢(几千条记录几分钟),因为每本书都需要两个事务:一个用于get_or_create作者,另一个用于get_or_create Book。是否可以使用诸如bulk_create之类的东西,并在书籍与作者和标题匹配时更新价格?
答案 0 :(得分:0)
在下文中,我假设您的外部数据源与以下形式“形态等效”:
books = [{'title': 'Title1', 'author': 'author name 1', 'price': 23.50},
{'title': 'Title2', 'author': 'author name 2', 'price': 24.50}, ...]
然后你可以用这种方式更新你的模型
books_queryset = Book.objects.select_related()
for book in books:
try:
item = books_queryset.get(title=book['title'], author__last_name=book['author'])
item.price = book['price']
item.save()
except ObjectDoesNotExist:
# Add new item