Предположим, у меня есть отношение от одного до многих, определенное в sqlalchemy.Использование тернарного оператора в заявлении фильтра sqlalchemy
В моей родительской таблице есть куча детей. И у этих детей есть время начала и окончания. Время - это объекты datetime.time, в которых часы должны быть между 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
Хороший ответ, но вы также можете объяснить, почему тройной оператор не работает. Причина в том, что при использовании 'if' /' else' Python пытается оценить условие ветвления во время определения запроса, что не имеет смысла. Использование 'case()' добавляет условие к SQL запроса. – augurar