Python 在sqlalchemy筛选器语句中使用三元运算符
假设我在sqlalchemy中定义了一对多关系 我的父母桌上有一群孩子。这些孩子有开始和结束的时间。时间是datetime.time对象,其中小时数必须介于0和23之间。如果结束时间早于开始时间(如8:00开始,01:00结束),则像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(
(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中。