批量创建Django与每个记录的唯一序列或值?

时间:2014-09-04 16:51:53

标签: python sql django batch-file orm

当我在DB中的其他位置创建记录时,我拥有本质上是一个表,它是唯一键的可用代码/序列池。 现在我运行一个事务,我可以使用切片运算符[:code_count]从code 10的代码中获取5000个代码,其中code_count == 5000。

这很好用,但是对于每个插入,我必须遍历每个代码并在使用代码时手动将其插入到记录中。

有更好的方法吗?

示例代码(省略与所有new_items类似的每个new_item的其他属性):

code_count=5000
pool_cds = CodePool.objects.filter(free_indicator=True)[:code_count]

        for pool_cd in pool_cds:

            new_item = Item.objects.create(
                pool_cd=pool_cd.unique_code,
            )
            new_item.save()


        cursor = connection.cursor()
        update_sql = 'update CodePool set free_ind=%s where pool_cd.id in %s'
        instance_param = ()

        #Create ridiculously long list of params (5000 items)
        for pool_cd in pool_cds:
            instance_param = instance_param + (pool_cd.id,)
        params = [False, instance_param]
        rows = cursor.execute(update_sql, params)

1 个答案:

答案 0 :(得分:0)

据我所知,它是如何运作的:

code_count=5000
pool_cds = CodePool.objects.filter(free_indicator=True)[:code_count]
ids = []

for pool_cd in pool_cds:
    Item.objects.create(pool_cd=pool_cd.unique_code)
    ids += [pool_cd.id]

CodePool.objects.filter(id__in=ids).update(free_ind=False)

顺便说一下,如果使用queryset方法创建对象,则不需要调用save方法。 See docs