如何使用整数和日期字段组合限制查询

0 投票
1 回答
34 浏览
提问于 2025-04-14 16:08

我正在尝试构建一个查询,这个查询需要结合三张表。

set = db(
         (db.Investigation.WorkFlow == db.WorkFlowStatus.WorkFlow)
        &(db.WorkFlow.id == db.Investigation.WorkFlow)
        )

在我的最后一个条件中,我想选择那些已经过期的记录,像这样:

&(db.WorkFlowStatus.Overdue < (datetime.date.today() - db.Investigation.ValidFrom))

字段 Overdue 是一个整数(表示天数),字段 ValidFrom 是一个日期时间。

首先,我无法直接用 datetime.date.today() 减去 db.Investigation.ValidFrom,只能反过来。如果我用 db.Investigation.ValidFrom 减去 datetime.date.today() 是可以的,但我还是无法在查询中把结果转换成整数,以便和我的 Overdue 字段进行比较。

我尝试过用 datetime.timedelta(days=) 来转换 Overdue 字段(但是不支持这种类型),还尝试在减法结果上使用 .days(结果对象没有这个属性),但似乎都不管用。有没有办法可以把这个条件加进去,或者有什么其他的解决方法可以用?

1 个回答

1

你可以把pydal的查询语法和SQL语句混合在一起使用,比如在Postgres数据库中:

q = (db.Investigation.WorkFlow == db.WorkFlowStatus.WorkFlow)
q &= (db.WorkFlow.id == db.Investigation.WorkFlow)
q &= "(<WorkFlowStatus.Overdue field_name> < (CURRENT_DATE - <Investigation.ValidFrom field_name>))"
your_set = db(q)

这个还没有测试过

撰写回答