Peewee ORM-获取除其他查询中共享的所有行

时间:2019-05-12 06:04:39

标签: python python-3.x peewee

我有两个查询,可用查询和活动查询。

如果有活动的行,我想将其从可用行中排除。

在下面查看我的尝试

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'不受支持的操作数类型

在排除上一个查询的成员时应该如何查询?

谢谢!

1 个答案:

答案 0 :(得分:1)

首先,使用“ AvailParam.id.in_(active_params)” ...在IN子句的左侧和右侧进行选择没有任何意义:< / p>

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

如果您不想进入,请使用AvailParam.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/en/latest/peewee/query_examples.html#combining-results-from-multiple-queries