Существует ли оператор фильтра SQLlalchemy ORM, который проверяет общие элементы списка (другими словами, перекрывающиеся элементы)? - PullRequest
0 голосов
/ 22 мая 2019

Я создаю несколько объектов в приложении. При создании нового объекта сосуда (self) я использую код SQLalchemy для проверки правильности создания объекта. Одна из этих проверок заключается в проверке того, что определенный объект еще не существует с таким же атрибутом «имя» и общими элементами списка для атрибута «оборудование».

например. Я создаю объект судна, который имеет атрибут «имя» и атрибут «оборудование». Атрибут «name» просто имеет тип string, но атрибут «equipments» имеет тип array. Не допускается создание судна, если это название судна уже существует И ЕСЛИ суда, которые уже были созданы с таким же именем, содержат оборудование, аналогичное оборудованию для создаваемого судна. Фильтрация по тому же имени уже работает, однако проблема заключается в создании фильтра для общего оборудования.

Другими словами, я пытаюсь создать фильтр, который проверяет общие элементы списка между оборудованием судов. Кто-нибудь знает ответ на этот вопрос?

if session.query(Vessel)
            .filter(
                and_(
                    func.lower(Vessel.name) == self.name.lower(),
                    Vessel.equipment_types.in_(self.equipment_types),
                )
            )
            .first():

Я не ожидал, что этот код будет работать, потому что это сравнение «один ко многим», однако я не могу найти сравнение «многие ко многим» (отсюда и причина задавать этот вопрос).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...