我有一个Python2.7API,它查询SQL并提供一个JSON字典列表,然后在引导/Django站点中使用这些字典。
DB中的日期是'2017-04-20 00:00:00'格式的字符串,但有时源数据的时间为十进制,这会给strptime带来麻烦,所以我只保留字符串的前10个字符,从而删除秒。
import datetime
dict_list = response['my_list_of_dicts']
for dt_to_cmpr in dict_list:
dt_to_cmpr['date_key'] = dt_to_cmpr['date_key'][:10]在比较日期范围之前,日期必须是日期时间而不是字符串。(注意:对于生产,我计划考虑一些例外情况,例如null值。)
dt_to_cmpr['date_key'] = datetime.datetime.strptime(dt_to_cmpr['date_key'],
'%Y-%m-%d')我想知道关于字典的事情,从今天开始,date_key大概不会超过90天。(即时间框架中的总数,或每个字典的price_key之和)。
under_days = datetime.timedelta(days=-1)
over_days = datetime.timedelta(days=91)
now = datetime.datetime.now()
ttl_within_90days = sum(1 for d in response['my_list_of_dicts'] if (under_days <
(d.get('date_key')-now) < over_days))一个问题是,现在我已经转换了我的约会对象,而不是JSON serializable。所以,现在我得把它们再放回一根绳子里
for dt_to_cmpr in dict_list:
dt_to_cmpr['date_key'] = dt_to_cmpr['date_key'].strftime("%Y-%m-%d")为了简单起见,我清理了上面的内容,但这一切都应该是可行的。当它到达Django时,视图将再次将它们都隐藏回日期,以便在模板中使用。
我可以让Python把我的日期字符串当作90天比较的时间来处理,但不要把它们放在一边。或者让JSON使用Python时间?每个页面加载的迭代次数都很慢,不可能是最好的方法。
发布于 2016-04-24 01:10:07
主要问题是存储日期时间的方式。您应该将它们作为实际的日期时间存储在数据库中,而不是字符串中。不能对字符串字段执行日期查询。相反,您必须使用低效的方法来查询所有记录,然后在python中过滤所有记录。创建数据库数据类型是有原因的,请使用它们。
没有理由将日期时间转换为字符串,除非在需要将其格式化为json或html的最后时刻,唯一需要这样做的代码是Django应用程序。这意味着:
如果您不控制数据库,最好的情况是2次转换
string -> datetime。datetime -> string。如果您可以修复数据库,那么您只需要进行第二次转换。
https://stackoverflow.com/questions/36818043
复制相似问题