Python datetime.strptime仅适用于dev环境

时间:2013-07-02 07:17:49

标签: python django datetime python-datetime

这是我的代码:

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

MORE:

报告的编制方式如下:

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')

2 个答案:

答案 0 :(得分: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个对象。< / p>

如果您在服务器后端使用日期时间操作,请考虑一些SQL服务器支持本机日期时算术,但SQLite(您通常开发的数据库)。 PostgreSQL将生成datetime个对象,SQLite生成字符串。

您要么根据数据库设置切换处理日期的方式,要么检测是否已有datetime对象并跳过解析。

答案 1 :(得分:1)

strptime会产生一个日期时间对象,在您的调试环境中可以打印,您需要将其更改为:

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

但是因为strptime通常用于将日期/时间转换为字符串中的datetime对象,所以我不确定为什么你不直接使用字符串。即 '日期':ⅰ[ '月']