Правильное использование Range.overlaps в SQLModel/SQLAlchemyPython

Программы на Python
Anonymous
Правильное использование Range.overlaps в SQLModel/SQLAlchemy

Сообщение Anonymous »

У меня есть следующий код:

Код: Выделить всё

overlapping: Sequence[Booking] = (
await session.exec(
select(Booking)
.join(Apartment)
.join(User)
.where(
Range(
lower=booking.end_date,
upper=booking.cleaning_deadline,
bounds="[]",
).overlaps(Range(Booking.end_date, Booking.cleaning_deadline))
)
)
).all()
Он выдает следующий результат:

Код: Выделить всё

Traceback (most recent call last):
...
File "/home/jakov/Projects/intis/src/web/server.py", line 120, in import_calendar
).overlaps(Range(Booking.end_date, Booking.cleaning_deadline))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakov/.cache/pypoetry/virtualenvs/intis-I4I4liA8-py3.12/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/ranges.py", line 381, in overlaps
self._compare_edges(slower, slower_b, olower, olower_b) >= 0
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jakov/.cache/pypoetry/virtualenvs/intis-I4I4liA8-py3.12/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/ranges.py", line 274, in _compare_edges
if value1 < value2:  # type: ignore
^^^^^^^^^^^^^^^
File "/home/jakov/.cache/pypoetry/virtualenvs/intis-I4I4liA8-py3.12/lib/python3.12/site-packages/sqlalchemy/sql/elements.py", line 3938, in __bool__
raise TypeError("Boolean value of this clause is not defined")
TypeError: Boolean value of this clause is not defined
По сути, я хочу выполнить этот запрос через ORM:

Код: Выделить всё

select * from booking b where (b.end_date , b.cleaning_deadline) overlaps (?, ?);
Я протестировал его в базе данных, и он работает, но я не могу заставить SQLAlchemy делать то, что я хочу.

Подробнее здесь: https://stackoverflow.com/questions/790 ... sqlalchemy

Вернуться в «Python»