Python Peewee ORM——获取除其他查询中共享的行以外的所有行

Python Peewee ORM——获取除其他查询中共享的行以外的所有行,python,python-3.x,peewee,Python,Python 3.x,Peewee,我有两个查询,可用和活动 如果有一行处于活动状态,我希望将其从可用行中排除 请参阅下面我的尝试: active_params = (AvailParam .select() .join(AvailParamPhones) .join(Phone) .where(AvailParamPhones.phone == phone) .order_by(AvailParam.base_param.name)

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

如果有一行处于活动状态,我希望将其从可用行中排除

请参阅下面我的尝试:

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)
                )
active_params=(可用内存)
.选择()
.join(可用ramphones)
.加入(电话)
.where(可用ramphones.phone==电话)
.order_by(AvailParam.base_参数名称)
)
可用参数=(可用内存)
.选择()
.join(可用ramphones,join.LEFT_-OUTER)
.where(AvailParam.select()首先,使用“AvailParam.id.in_(active_参数)”…在in子句的左侧和右侧使用select是没有意义的:

avail_params = (AvailParam
                .select()
                .join(AvailParamPhones, JOIN.LEFT_OUTER)
                .where( AvailParam.id.in_(active_params) )
                .order_by(AvailParam.base_param.name))
如果不想在中,请在(…)中使用AvailParam.id.NOT_:

如果您的数据库支持除外的其他功能,则还可以使用复合选择查询。例如:

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