在 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)
假设我在 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)