Peewee ORM - получить все строки, кроме тех, которые были разделены в другом запросе - PullRequest
1 голос
/ 12 мая 2019

У меня есть два запроса, доступных и активных.

Если у меня есть активная строка, я бы хотел исключить ее из доступной.

См. Мою попытку ниже:

active_params = (AvailParam
        .select()
        .join(AvailParamPhones)
        .join(Phone)
        .where(AvailParamPhones.phone == phone)
        .order_by(AvailParam.base_param.name)
        )

avail_params = (AvailParam
                .select()
                .join(AvailParamPhones, JOIN.LEFT_OUTER)
                .where( AvailParam.select() << active_params )
                .order_by(AvailParam.base_param.name)
                )

Это дает мне

TypeError: неподдерживаемые типы операндов для <<: 'ModelSelect' и 'ModelSelect' </p>

Как следует запрашивать при исключении членов из предыдущего запроса?

Спасибо!

1 Ответ

1 голос
/ 12 мая 2019

Ну, во-первых, используйте «AvailableParam.id.in_ (active_params)» ... бессмысленно иметь выбор с левой и правой стороны предложения IN:

avail_params = (AvailParam
                .select()
                .join(AvailParamPhones, JOIN.LEFT_OUTER)
                .where( AvailParam.id.in_(active_params) )
                .order_by(AvailParam.base_param.name))

Если вы хотите НЕ ВХОДИТЬ, используйте СвободныйParam.id.not_in (...):

avail_params = (AvailParam
                .select()
                .join(AvailParamPhones, JOIN.LEFT_OUTER)
                .where( AvailParam.id.not_in(active_params) )
                .order_by(AvailParam.base_param.name))

Если ваша база данных поддерживает EXCEPT, вы также можете использовать сложный запрос выбора. Пример:

http://docs.peewee -orm.com / ен / последний / PeeWee / query_examples.html # комбинируя-конечные результаты из-множественных запросов

...