2014-09-04 26 views
0

我有什麼本質上是一個表,這是當我在數據庫中的其他地方創建記錄時,唯一鍵的可用代碼/序列池。 現在我運行一個事務,我可以使用切片運算符[:code_count]在code_count == 5000處獲取10億個代碼的可用池中的5000個代碼。批量創建Django具有獨特的序列或每個記錄的值?

此工作正常,但對於每個插入,當我使用代碼時,我必須運行每個代碼並手動將其插入到記錄中。

有沒有更好的方法?

示例代碼(省略類似於所有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) 

回答

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

相關問題