Peewee ORM——获取除在另一个查询中共享的行之外的所有行

Peewee ORM -- get all rows EXCEPT those shared in another query

我有两个查询,可用且有效。

如果我有一行处于活动状态,我想将其排除在可用之外。

在下面查看我的尝试:

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'

在排除先前查询的成员时应该如何查询?

谢谢!

嗯,首先,使用 "AvailParam.id.in_(active_params)"...在 IN 子句的 left-hand-side 和 right-hand-side 上使用 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_in(...):

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

如果您的数据库支持 EXCEPT,您还可以使用复合 select 查询。示例:

http://docs.peewee-orm.com/en/latest/peewee/query_examples.html#combining-results-from-multiple-queries