首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Python只在datetime.strptime环境中工作。

Python只在datetime.strptime环境中工作。
EN

Stack Overflow用户
提问于 2013-07-01 23:17:48
回答 2查看 2K关注 0票数 0

这是我的密码:

代码语言:javascript
运行
AI代码解释
复制
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)

但是,在我的生产服务器上(ubuntu12.04virtualenvDjango 1.5),它不能处理这个错误:

代码语言:javascript
运行
AI代码解释
复制
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")

我不明白为什么要在一个环境而不是另一个环境上工作?这是谁错了,开发还是刺激?

代码语言:javascript
运行
AI代码解释
复制
Prod : Python 2.7.3
Dev: Python 2.7.1

更多:

这是如何提出报告的:

代码语言:javascript
运行
AI代码解释
复制
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')
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-01 23:21:09

在您的生产环境中,i['month']已经是datetime.datetime对象:

代码语言:javascript
运行
AI代码解释
复制
>>> 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将生成字符串。

您可能希望根据数据库设置在这里切换处理日期的方式,或者检测是否已经有了datetime对象并跳过解析。

票数 2
EN

Stack Overflow用户

发布于 2013-07-01 23:26:21

strptime会产生一个datetime对象,在您的调试环境中,它是可打印的,对于生产,您需要将它更改为:

代码语言:javascript
运行
AI代码解释
复制
datetime.strptime(i['month'], "%Y-%m-%d %H:%M:%S").format('how you would like to display it')

但是,由于通常使用strptime从字符串将日期/时间转换为datetime对象,所以我不确定为什么不直接使用字符串。即“日期”:我“月份”

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17419663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文