【发布时间】:2015-07-17 08:53:28
【问题描述】:
我有一个名为 Friend 的 django 模型,其中包含一个名为 friends 的多对多字段,以及另一个名为 FriendshipInfo 的模型。出于性能原因,我决定保留一个包含每个人拥有的朋友数量的字段。所以现在在迁移脚本中我需要更新我的数据库中的现有朋友。我就是这样做的:
def forward(...):
# ... adding the new count field ...
for person in Friend.objects.all():
person.friends_count = len(persion.friends.all())
person.uupdate()
我想知道是否有任何方法可以更有效地执行此操作(以某种方式批量更新?)
技术信息:
- 我使用的是 Python 2.7
- 我使用的是 django 1.6
- 对于我使用南的迁移
【问题讨论】:
-
至少使用
person.friends.count()而不是len(person.friends.all())。来自 django 的文档:“count() 调用在幕后执行 SELECT COUNT(*),因此您应该始终使用 count() 而不是将所有记录加载到 Python 对象中并在结果上调用 len()(除非您无论如何都需要将对象加载到内存中,在这种情况下 len() 会更快)。”
标签: python django django-models migration