Вы, вероятно, импортируете datetime.datetime
(класс) вместо datetime
(модуль).
Всегда импортируя модуль datetime
, вы можете использовать как datetime.datetime
, так и datetime.date
, что больше подходит для вашего случая и имеет хороший метод .today()
.
И вам не нужна вся поездка str () -> strptime (), поскольку это уже должен быть объект даты python.
Также вы можете вычесть даты в запросе и получить разницу в днях:
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 см. здесь
В связанной заметке, зачем вам приводить 'startdate' внутри запроса? Храните это как строку, или метку времени, или как-то иначе? Если это свидание, оно должно рассматриваться как таковое. Типы важны в RDBMS, для правильности и производительности. Вы можете (по крайней мере) иметь ошибки по одному, вычитая даты и даты.