【发布时间】:2015-12-27 18:08:43
【问题描述】:
我必须在一个表中插入多个对象,有两种方法可以做到这一点-
1) 使用save() 插入每一个。但在这种情况下,将有 n 个对象的 n 个 sql dB 查询。
2) 使用bulk_create() 将它们全部插入到一起。在这种情况下,对于 n 个对象会有 一个 sql dB 查询。
显然,第二种选择更好,因此我正在使用它。现在bulk__create 的问题是它不返回插入对象的ids,因此它们不能进一步用于创建其他模型的对象,这些模型对所创建的对象具有外键。
为了克服这个问题,我们需要获取 bulk_create 创建的对象。
现在的问题是“假设在我的情况下,没有办法唯一标识创建的对象,我们如何获取它们?”
目前我正在维护一个时间戳来获取它们,如下所示-
my_objects = []
# Timestamp to be used for fetching created objects
time_stamp = datetime.datetime.now()
# Creating list of intantiated objects
for obj_data in obj_data_list:
my_objects.append(MyModel(**obj_data))
# Bulk inserting the instantiated objects to dB
MyModel.objects.bulk_create(my_objects)
# Using timestamp to fetch the created objects
MyModel.objects.filter(created_at__gte=time_stamp)
现在这很好用,但在一种情况下会失败。
- 如果在批量创建这些对象时,从其他地方创建了更多对象,那么这些对象也将在我的查询中获取,这是不希望的。
有人可以提出更好的解决方案吗?
【问题讨论】:
标签: python django database django-models orm