簡體   English   中英

使用每條記錄的唯一序列或值批量創建Django?

[英]Bulk create Django with unique sequences or values per record?

當我在數據庫中的其他位置創建記錄時,我實際上具有一個表,該表是唯一鍵的可用代碼/序列的池。 現在,我運行一個事務,其中我可以使用slice運算符[:code_count](其中code_count == 5000)從可用的10億個代碼池中提取5000個代碼。

這可以正常工作,但是對於每次插入,我都必須遍歷每個代碼,並在使用代碼時手動將其插入記錄中。

有沒有更好的辦法?

示例代碼(為每個new_item省略與所有new_items相似的其他屬性):

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)

據我了解它是如何工作的:

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方法create創建對象,則不需要調用save方法。 參見docs

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM