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

时间:2015-05-06 20:32:51

标签: python sqlalchemy

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

我的父表有一堆孩子。这些孩子的开始和结束时间都与他们有关。时间是datetime.time对象,其中小时必须在0到23之间。当结束时间出现在开始时间之前(如从8:00开始到01:00结束),像{{1}这样的简单查询}不起作用。

有没有办法让这个陈述有效?

(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) )

1 个答案:

答案 0 :(得分:3)

您需要使用CASE声明:

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