从 django bulk_create 中选择/查询对象?

Posted

技术标签:

【中文标题】从 django bulk_create 中选择/查询对象?【英文标题】:Selecting/Querying objects from django bulk_create? 【发布时间】:2012-06-03 16:24:30 【问题描述】:

如果我使用 bulk_create 插入对象:

objList = [a, b, c,] #none are saved
model.objects.bulk_create(objList)

对象的 ID 不会更新(请参阅https://docs.djangoproject.com/en/dev/ref/models/querysets/#bulk-create)。 所以我不能将这些家伙用作外键对象。我想在批量创建它们之后从数据库中查询它们,然后将它们用作外键对象,但我没有它们的 ID 来查询它们。如何从数据库中查询这些对象(假设除 id 之外的列中可能存在重复值)?或者有没有更好的方法将批量创建的项目作为外键?

【问题讨论】:

【参考方案1】:

如果您只有三个对象,如您的示例所示,您可能希望单独调用 save ,将调用包装在事务中,如果它需要是原子的。

如果还有更多,这可能是使用 bulk_create 的原因,您可能会遍历它们并在每个上调用 save。同样,如果需要,您可以将其包装在事务中。不过,您可能不喜欢此选项,因为运行大量插入查询可能会成为某些数据库设置的问题。

另外,一个技巧是向对象添加一些已知的唯一标识符,以便您可以在保存后重新查询这些。

【讨论】:

以上是关于从 django bulk_create 中选择/查询对象?的主要内容,如果未能解决你的问题,请参考以下文章

Django model中数据批量导入bulk_create()

Django插入多条数据—bulk_create

Django bulk_create 忽略导致 IntegrityError 的行?

django-pyodbc bulk_create 坏了

django bulk_create 查询中的外键关系?

为什么在Django上使用bulk_create插入带有外键的数据会返回“属性对象不可调用”?