我正在做一个批量创建,一次将大量信息转储到数据库中。信息是分层的-我创建顶层,然后将数据用作下一层的关系,等等。我不能使用PostgreSQL,所以在执行批量创建时,我不能利用它返回主键的能力。你知道吗
相反,我创建一个UUID,并将其粘贴到每一层中,然后使用它来获取我刚刚创建的行,以便在下一层中使用它们。简化模型如下所示:
class Container(Component):
parent = models.ForeignKey('self', related_name='children', null=True, blank=True, on_delete=models.CASCADE)
bulk_insert_id = models.UUIDField(default=uuid.uuid4)
我刚刚创建的内容的批量创建/查询如下所示:
bulk_insert_id = uuid.uuid4()
requirements = []
for requirement, child in zip(self.component['children'], self.children):
r = models.Container(
parent=self.db,
bulk_insert_id=bulk_insert_id,
)
child.db_id = r
requirements.append(r)
models.Container.objects.bulk_create(requirements)
requirements = models.Container.objects.filter(bulk_insert_id=bulk_insert_id)
我遇到的问题是,当我实际使用这些元素时,我会发现它们的副本。就好像一个拷贝是由bulk create插入的,然后在我第一次访问/保存数据时创建另一个拷贝。以下是SSMS的示例屏幕截图:
如上图所示,最后两行是前两行的副本。你知道这些复制品是从哪里来的吗?你知道吗
工具:
这个问题对我来说不是很清楚,但由于我还不能发表评论,这里有一个答案:
我将假设您的数据在一个数组中(比如
String [] dataset
),并希望将其转换为二维数组,因此以下是步骤首先使用AxB大小初始化二维数组:
然后,您需要用数据集填充二维数组。这可以通过一个基本的for循环来实现:
可以使用guava库进行分区 Guava list partition
相关问题 更多 >
编程相关推荐