考虑以下(伪Python)代码:
l = [some, list]
for i in l:
o, c = Model.objects.get_or_create(par1=i["something"], defaults={'par2': i["else"],})
假设大多数时候对象会被检索,而不是创建,
通过第一个 SELECT() 查询不在 par1 定义的集合中的对象,然后批量插入丢失的对象,可以明显提高性能。
但是,是否有一种简洁的 Python/Django 模式可以在不深入 SQL 的情况下实现这一目标?
这是一个批量导入例程,因此 l 包含字典,而不是 django 模型实例。
最佳答案
给定 ID 列表,您可以使用 Django 使用 __in
运算符快速为您提供相应的 Model 实例:https://docs.djangoproject.com/en/dev/ref/models/querysets/#in
photos_exist = Photo.objects.filter(
id__in=photo_ids
)
关于python - django get_or_create - 对象列表的性能优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24502658/