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 查询。示例:
我有两个查询,可用且有效。
如果我有一行处于活动状态,我想将其排除在可用之外。
在下面查看我的尝试:
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 查询。示例: