2010-10-01 53 views
3

我想用會計系統中的電子表格更新客戶表格。不幸的是,我不能清除數據並重新加載所有數據,因爲表中有一些不在導入數據中的記錄(不要問)。批量更新表格

對於2000條記錄,這需要大約5分鐘,我想知道是否有更好的方法。

for row in data: 

     try: 

      try: 
       customer = models.Retailer.objects.get(shared_id=row['Customer']) 
      except models.Retailer.DoesNotExist: 
       customer = models.Retailer() 

      customer.shared_id = row['Customer'] 
      customer.name = row['Name 1'] 
      customer.address01 = row['Street'] 
      customer.address02 = row['Street 2'] 
      customer.postcode = row['Postl Code'] 
      customer.city = row['City'] 

      customer.save() 

     except: 
      print formatExceptionInfo("Error with Customer ID: " + str(row['Customer'])) 

回答

1

我已經使用這種批量更新片斷一些成功: http://djangosnippets.org/snippets/446/

這是一個有點過時,但它的工作在Django的1.1,所以我想你仍然可以使它發揮作用。如果你正在尋找一種快速的方法來做一次性的批量插入,這是最快的(我不確定我是否信任它經常使用而沒有認真測試性能)。

+0

謝謝你,我會看看。 – alj 2010-10-04 10:42:31

2

看我的答案在這裏:Django: form that updates X amount of models

的查詢集已經update()方法 - 剩下的就是在上面的鏈接解釋。

+0

更新設置查詢集中_all_元素的_same_值。我不認爲這是OP想要的。 – 2010-10-01 11:20:08

+0

@Manoj:呃 - 你當然是對的 - 在我看來,我誤解了這個問題。 – bx2 2010-10-01 11:23:48

+0

是的。這是真的。每條記錄都有不同的數據。不過謝謝。 – alj 2010-10-04 10:42:03

1

我對這個問題的解決方案做了一個非常粗略的嘗試,但它還沒有完成,並且不支持直接使用django orm對象。

http://pypi.python.org/pypi/dse/0.1.0

它`沒有得到妥善testet,讓我知道,如果你有關於如何提高它的任何建議。使用django orm來做這樣的事情是非常糟糕的。

Thomas

+0

感謝您的建議。 ALJ – alj 2010-10-04 10:41:30