我正在尝试查找当前日期与我从数据库中提取的日期之间的天数差异(PostgreSQL)
这是我的代码:
cur.execute('select id, city_id, event_id, duration, DATE(startdate) from main_cityevent where DATE(startdate) <= DATE(NOW())')
rows = cur.fetchall()
for city_event in rows:
startdate = str(city_event[4])
sd = datetime.strptime(startdate, "%Y-%m-%d")
diff = datetime.datetime.now() - sd
最后一条命令(diff = datetime.datetime.now()-sd)给我一个AttributeError。
我究竟做错了什么?
最佳答案
您可能正在导入datetime.datetime
(该类)而不是datetime
(该模块)。
通过始终导入datetime
模块,可以同时使用datetime.datetime
和datetime.date
,这在您的情况下更合适,并且具有不错的.today()
方法。
而且您不需要整个str()-> strptime()旅行,因为它应该已经是一个python date对象。
另外,您可以减去查询中的日期并获得天数的差额:
postgres=# select '2011-07-05'::date - current_date;
?column?
----------
59
(1 row)
所以您的查询将类似于
SELECT id, city_id, event_id, duration, DATE(startdate)-CURRENT_DATETIME AS days FROM main_cityevent WHERE DATE(startdate) <= DATE(NOW())
有关postgres日期/时间功能的完整说明,请参见here
在相关说明中,为什么需要在查询中强制转换“ startdate”?是否将其存储为字符串,时间戳或其他内容?如果是日期,则应这样处理。对于RDBMS,类型对于正确性和性能很重要。通过减去日期和日期时间,您(至少)会出现一次偏离的错误。