【发布时间】:2016-08-15 22:38:36
【问题描述】:
考虑两个简单的相关模型:
class A(models.Model):
id = models.IntegerField(primary_key=True)
class B(models.Model):
a = models.ForeignKey(A)
# other fields
在B 上进行非常大的批量插入之前:
lots_of_b_objects = [B(a_id=1234), B(a_id=5678), ...]
B.objects.bulk_create(lots_of_b_objects)
(请注意,出于性能原因,我在批量创建时从未真正持有 A 对象,我只引用它们的知名 id,无论它是否存在)
确保所有相关的A 对象也存在的高性能方法是什么?
目前我最好的解决方案是预先确定一组相关的A 并为每个运行get_or_create()。这还不够快。在进行批量插入之前,有没有更好的方法来创建所有 A 对象?
这里不能选择去规范化模型,因为数据模型比描述的要复杂一些。
【问题讨论】:
-
bulk_insert我想你的意思是bulk_create方法? -
当然是的:)。那么当你使用
well-known id这个词时,你怎么不知道它是否存在呢?还是您只是指用于a_id的整数?但是这个整数值是怎么到这里的呢? -
@AKS 请注意,这不是自增字段,而是业务逻辑的一部分。具体来说,它源自用于创建 B 对象的属性。
标签: python django django-models