Python 在sqlalchemy筛选器语句中使用三元运算符

Python 在sqlalchemy筛选器语句中使用三元运算符,python,sqlalchemy,Python,Sqlalchemy,假设我在sqlalchemy中定义了一对多关系 我的父母桌上有一群孩子。这些孩子有开始和结束的时间。时间是datetime.time对象,其中小时数必须介于0和23之间。如果结束时间早于开始时间(如8:00开始,01:00结束),则像(Children.start\u time=Children.end\u time)这样的简单查询不起作用 有没有办法让这句话起作用 parent_query = Parents.join(Parents.children).filter(

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

我的父母桌上有一群孩子。这些孩子有开始和结束的时间。时间是datetime.time对象,其中小时数必须介于0和23之间。如果结束时间早于开始时间(如8:00开始,01:00结束),则像
(Children.start\u time=Children.end\u 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)
                )
parent\u query=Parents.join(Parents.children.filter)(
(Child.start\u time=搜索\u小时
) &\
(Child.end\u time.minute>=搜索\u分钟)
)
我得到一个
类型错误:未定义此子句的布尔值

您需要使用一个语句:

case([
    (extract('hour', Child.end_time) < extract('hour', Hours.start_time), extract('hour', Child.end_time))
], else_=extract('hour', Child.end_time) + 24)
案例([
(摘录('hour',Child.end_time)<摘录('hour',Hours.start_time),摘录('hour',Child.end_time))
],else=提取('hour',Child.end\u time)+24)
您需要使用以下语句:

case([
    (extract('hour', Child.end_time) < extract('hour', Hours.start_time), extract('hour', Child.end_time))
], else_=extract('hour', Child.end_time) + 24)
案例([
(摘录('hour',Child.end_time)<摘录('hour',Hours.start_time),摘录('hour',Child.end_time))
],else=提取('hour',Child.end\u time)+24)
您需要使用以下语句:

case([
    (extract('hour', Child.end_time) < extract('hour', Hours.start_time), extract('hour', Child.end_time))
], else_=extract('hour', Child.end_time) + 24)
案例([
(摘录('hour',Child.end_time)<摘录('hour',Hours.start_time),摘录('hour',Child.end_time))
],else=提取('hour',Child.end\u time)+24)
您需要使用以下语句:

case([
    (extract('hour', Child.end_time) < extract('hour', Hours.start_time), extract('hour', Child.end_time))
], else_=extract('hour', Child.end_time) + 24)
案例([
(摘录('hour',Child.end_time)<摘录('hour',Hours.start_time),摘录('hour',Child.end_time))
],else=提取('hour',Child.end\u time)+24)

答案不错,但您可能还想解释三元运算符不起作用的原因。原因是当使用
if
/
else
时,Python会在定义查询时尝试计算分支条件,这是没有意义的。使用
case()。原因是当使用
if
/
else
时,Python会在定义查询时尝试计算分支条件,这是没有意义的。使用
case()。原因是当使用
if
/
else
时,Python会在定义查询时尝试计算分支条件,这是没有意义的。使用
case()。原因是当使用
if
/
else
时,Python会在定义查询时尝试计算分支条件,这是没有意义的。使用
case()
将条件添加到查询的SQL中。