2013-07-02 34 views
0

這是我的代碼:Python的datetime.strptime只適用於開發環境

for i in report: 
    reports.append({ 
     'total':i['vends__sum'], 
     'date':datetime.strptime(i['month'], "%Y-%m-%d %H:%M:%S") 
    }) 

這個工作對我的OSX的開發環境(的virtualenv ENV的Django 1.5)

但我的生產服務器上(Ubuntu的12.04的virtualenv Django的1.5),它並沒有與此錯誤的工作:

Django Version: 1.5.1 
Exception Type: TypeError 
Exception Value:  
must be string, not datetime.datetime 
Exception Location: /var/www/webapps/cirostats/products/templatetags/product_tags.py in show_main_chart, line 41 

41號線是

'date':datetime.strptime(i['month'], "%Y-%m-%d %H:%M:%S")

我弄不明白爲什麼在一個環境而不是其他環境中工作?誰在這裏錯了,開發人員或產品?

Prod : Python 2.7.3 
Dev: Python 2.7.1 

更多:

這是報告的製作過程:

truncate_date = connection.ops.date_trunc_sql('month','timestamp') 
qs = objects.extra({'month':truncate_date}) 
report = qs.values('month').annotate(Sum('vends')).order_by('month') 
+0

嗯,我是這樣的:{'vends__sum':328,'month':u'2013-06-01 00:00:00'} – Harry

+1

沒有生產,不是這樣。 –

回答

2

在生產環境中,i['month']已經一個datetime.datetime對象:

>>> import datetime 
>>> example = u'2013-06-01 00:00:00' 
>>> example = datetime.datetime.strptime(example, "%Y-%m-%d %H:%M:%S") 
>>> example = datetime.datetime.strptime(example, "%Y-%m-%d %H:%M:%S") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: must be string, not datetime.datetime 

所以要找到不同的賭注在您的生產和開發環境中,您必須跟蹤產生report的東西,並找出爲什麼一個環境產生字符串,而另一個產生datetime.datetime對象。

如果您在服務器後端使用日期時間操作,請考慮到某些SQL服務器支持本地日期時間算術,但SQLite(您通常針對的數據庫)不支持。 PostgreSQL將產生datetime對象,SQLite會產生字符串。

您要麼根據數據庫設置切換如何處理日期,要麼檢測您是否已有對象並跳過解析。在日期時間對象,它是在你的調試環境打印,生產

+0

好吧,這就是「我」在循環中:datetime.strptime(「%s」%i ['month'],「%y-%m-%d%H:%M:%S」)on我的開發環境。好吧,但你說的話有道理,讓我嗅探 – Harry

+0

@Harry:我已經添加了一個例子,我們先傳遞一個字符串,然後將'.strptime()'的結果傳遞給'.strptime()'來重現你的例外。 –

+0

在我的問題中檢查我的更新如何創建它,我看到我實際上創建一個日期時間對象,你會如何使它成爲一個字符串,仍然保持我的邏輯機智? – Harry

1

strptime的結果,你需要將其更改爲:

datetime.strptime(i['month'], "%Y-%m-%d %H:%M:%S").format('how you would like to display it') 

但既然你strptime通常用於日期/時間轉換爲日期時間對象從字符串我不知道爲什麼你不只是直接使用字符串。即 'date':i ['month']

+0

是的,我直接使用它,但這不符合預期的開發,但多數民衆贊成在.. – Harry

+1

你可以隨時使它有條件的基礎上的類型。 –