Я знаю, что просто используя raw sql, я могу добавить ограничение исключения, например:
ADD CONSTRAINT unique_daterange_constraint
EXCLUDE USING gist
( foo WITH =,
daterange(start_date, end_date, '[]') WITH &&
);
Однако мне нужно иметь возможность сделать то же самое с sqlalchemy. То, что у меня сейчас есть (что не работает) в моих аргументах таблицы:
__table_args__ = (
postgresql.ExcludeConstraint(
("foo", "="),
(DateRange("start_date", "end_date", bounds="[]"), "&&"),
name="unique_daterange_constraint",
using="gist",
),
)
DateRange импортируется из psycopg2.extras, поскольку я понимаю, что именно так реплицировать тип postgres daterange как используется в sql выше.
Моя трассировка стека при попытке создать файл миграции alembi c сообщает мне, что раздел диапазона дат неверен с
sqlalchemy.exc.ArgumentError: SQL expression object expected, got object of type <class 'psycopg2._range.DateRange'> instead
Я знаю, что потенциальный способ, которым я мог бы справиться с этим (поскольку он действительно хочет столбец, в который я помещаю DateRange), - это создать столбец диапазона дат и триггер, который при вставке или обновлении заполняет мой столбец диапазона дат датами начала и окончания, но это похоже на Мне не следовало этого делать. Кажется, что если я могу просто определить диапазон дат, используя существующие столбцы в sql, я также смогу использовать sqlalchemy.
Есть ли способ добиться этого так, как я хочу?