Python's timedelta
не понимает конструкции SQLAlchemy;это имеет дело с числами в Python.Чтобы создать интервальное выражение SQL, вы должны использовать Язык выражений SQL для создания подходящей конкретной конструкции СУБД.В случае с Postgresql вы можете использовать функции make_interval()
:
rss_query = db.session.query(Feed).\
filter(Feed.rss_url.isnot(None)).\
filter(Feed.available).\
filter(Feed.last_parsed_at +
func.make_interval(0, 0, 0, 0, 0, 0, Feed.frequency) <
datetime.utcnow())
К сожалению func
функции не поддерживают именованные аргументы, поэтому вам нужно передать годы, месяцы, недели, дни, часы и минуты в явном виде.
Другой вариант - использовать некоторую арифметику:
filter(Feed.last_parsed_at +
cast('1 second', Interval) * Feed.frequency <
datetime.utcnow())