gpt4 book ai didi

python - 基于表列值的Timedelta

转载 作者:行者123 更新时间:2023-11-29 13:11:05 32 4
gpt4 key购买 nike

我有一个包含 10k rss_feed URL 的表格,由于它们发布的频率不同,我想在不同的时间对其进行解析。在我的 Feed 表中,我有以下列:

  1. rss_url(字符串)
  2. last_parsed_at(带时区的 UTC 日期时间)
  3. 频率(整数)

我想获取所有将根据频率排队的提要对象。频率列是秒数。

我正在尝试使用以下查询

rss_query=db.session.query(Feed).filter(Feed.rss_url.isnot(None)).filter(Feed.available==True).filter(Feed.last_parsed_at+timedelta(seconds=Feed.frequency)<datetime.utcnow())

出现以下错误

TypeError: unsupported type for timedelta seconds component: InstrumentedAttribute

最佳答案

Python 的 timedelta 不理解 SQLAlchemy 结构;它处理 Python 中的数字。为了生成区间 SQL 表达式,您必须使用 SQL Expression Language生成合适的 DBMS 特定构造。对于 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())

关于python - 基于表列值的Timedelta,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54682500/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com