在 sqlalchemy 过滤语句中使用三元运算符

Using a ternary operator in a sqlalchemy filter statement

假设我在 sqlalchemy 中定义了一对多关系。

我的parenttable有一堆children。那些 children 附有开始和结束时间。时间为 datetime.time objects,其中小时数必须介于 0 和 23 之间。当结束时间出现在开始时间之前(例如开始于 8:00 并结束于 01:00 ),像 (Children.start_time <= search_time) & (search_time >= Children.end_time) 这样的简单查询不起作用。

有没有办法让这个声明生效?

        parent_query = Parents.join(Parents.children).filter(
                (Child.start_time <= search_time) &\
                (
                    (
                        extract('hour', Child.end_time) if\ 
                        extract('hour', Child.end_time) < extract('hour', Hours.start_time) else\
                        extract('hour', Child.end_time) + 24
                    )
                    >= search_hour
                ) &\
                (Child.end_time.minute >= search_minute)
                )

我得到一个 TypeError: Boolean value of this clause is not defined

您需要使用 CASE 语句:

case([
    (extract('hour', Child.end_time) < extract('hour', Hours.start_time), extract('hour', Child.end_time))
], else_=extract('hour', Child.end_time) + 24)