2013-08-29 35 views
0

編輯:事實證明,我不相信遷移與導致此錯誤有任何關係。將值賦給查詢集的下標元素不起作用

在下面我選擇聚合值並將這些值分配回使用模型的代碼部分,我發現這些值沒有被分配,因爲我已經將應用程序從django dev服務器遷移到了apache。

我的調試輸出顯示在分配這些值後,該值永遠不會實際應用於模型實例,並且稍後進行保存時也會反映模型實例中保留的零。

Python代碼

cursor.execute("""select CUSTNBR, 
          FROMDATE, 
          sum(DECTHERMS) as DECTHERMS, 
          max(PRICE) as PRICE, 
          sum(SALESDLRS) as SALESDLRS, 
          sum(MCFS) as MCFS 
        from LQPPNATGAS 
        where CUSTNBR = ? and 
          FROMDATE <> '20000000' 
        group by CUSTNBR, FROMDATE """,str(cust_number)) 


    row = cursor.fetchone() 
    while row: 
     if str(row.FROMDATE)[0:4] >= str(oldest_year): 

      b = Usage.objects.filter(user_id=user_id,from_date=row.FROMDATE) 

      b[0].decatherms = row.DECTHERMS 
      b[0].price = row.PRICE 
      b[0].sales_dollars = row.SALESDLRS 
      b[0].mcf = row.MCFS 
      b[0].save(update_fields=['decatherms','price','sales_dollars','mcf']) 

      print >> sys.stderr ,str(b[0].sales_dollars)+"="+str(row.SALESDLRS) 


     row = cursor.fetchone() 

在error.log中輸出

[Thu Aug 29 07:47:15 2013] [error] 0.00=168.22 
[Thu Aug 29 07:47:15 2013] [error] 0.00=16.78 
[Thu Aug 29 07:47:15 2013] [error] 0.00=1107.88 
[Thu Aug 29 07:47:15 2013] [error] 0.00=676.85 
[Thu Aug 29 07:47:15 2013] [error] 0.00=28.38 
[Thu Aug 29 07:47:15 2013] [error] 0.00=876.94 
[Thu Aug 29 07:47:15 2013] [error] 0.00=833.21 
[Thu Aug 29 07:47:15 2013] [error] 0.00=26.33 
[Thu Aug 29 07:47:15 2013] [error] 0.00=130.85 
[Thu Aug 29 07:47:15 2013] [error] 0.00=1058.53 
+1

你已經運行到一個事實,即[Django的查詢集懶](https://docs.djangoproject.com /en/1.5/topics/db/queries/#querysets-are-lazy)。 –

回答

0

我通過列表的[0]分配元件到另一個變量,B,然後執行該操作固定的問題在THAT變量上,而不是在我執行操作時指定[0]。

修訂Python代碼

cursor.execute("""select CUSTNBR, 
          FROMDATE, 
          sum(DECTHERMS) as DECTHERMS, 
          max(PRICE) as PRICE, 
          sum(SALESDLRS) as SALESDLRS, 
          sum(MCFS) as MCFS 
        from LQPPNATGAS 
        where CUSTNBR = ? and 
          FROMDATE <> '20000000' 
        group by CUSTNBR, FROMDATE """,str(cust_number)) 


    row = cursor.fetchone() 
    while row: 
     if str(row.FROMDATE)[0:4] >= str(oldest_year): 

      b = Usage.objects.filter(user_id=user_id,from_date=row.FROMDATE)[0] 

      print >> sys.stderr , "before b.decatherms="+str(b.decatherms) 

      b.decatherms = row.DECTHERMS 
      b.price = row.PRICE 
      b.sales_dollars = row.SALESDLRS 
      b.mcf = row.MCFS 
      b.save() #(update_fields=['decatherms','price','sales_dollars','mcf']) 

      print >> sys.stderr , "after b.decatherms="+str(b.decatherms) 

     row = cursor.fetchone() 

在error.log中輸出

[Fri Aug 30 10:37:28 2013] [error] before b.decatherms=0.0 
[Fri Aug 30 10:37:28 2013] [error] after b.decatherms=44.9 
[Fri Aug 30 10:37:28 2013] [error] before b.decatherms=0.0 
[Fri Aug 30 10:37:28 2013] [error] after b.decatherms=91.1 
[Fri Aug 30 10:37:28 2013] [error] before b.decatherms=0.0 
[Fri Aug 30 10:37:28 2013] [error] after b.decatherms=3.8 
[Fri Aug 30 10:37:28 2013] [error] before b.decatherms=0.0 
[Fri Aug 30 10:37:28 2013] [error] after b.decatherms=2.9 
[Fri Aug 30 10:37:28 2013] [error] before b.decatherms=0.0 
[Fri Aug 30 10:37:28 2013] [error] after b.decatherms=11.8