假设我们有这三个模型。
class Item(BaseModel):
title = CharField()
class User(BaseModel):
name = CharField()
class UserAnswer(BaseModel):
user = ForeignKeyField(User, 'user_answers')
item = ForeignKeyField(Item, 'user_answers_items')
answer = ForeignKeyField(Item, 'user_answers')
我想得到全部Items
其中没有相关的UserAnswer
当前用户的记录。在 SQL 中,它会是这样的:
select * from item i
left join useranswer ua on ua.item_id=i.id and ua.user_id=1
where ua.id is null;
是否可以使用 peewee 语法对两个字段进行左外连接约束?如果我能这样做的话那就太酷了:
Item.select().join(UserAnswer, JOIN_LEFT_OUTER, on=['__my_constraints_here__']).where(
(UserAnswer.id.is_null(True))
)
是的,您可以在多种条件下加入:
join_cond = (
(UserAnswer.item == Item) &
(UserAnswer.user == 1))
query = (Item
.select()
.join(
UserAnswer,
JOIN.LEFT_OUTER,
on=join_cond))
.where(UserAnswer.id.is_null(True)))
文档在这里:http://docs.peewee-orm.com/en/latest/peewee/api.html#Query.join http://docs.peewee-orm.com/en/latest/peewee/api.html#Query.join
抱歉,没有使用多个连接条件的示例,但是on
只是一个任意表达式,因此您可以在其中放置您喜欢的任何有效的 peewee“表达式”。
重要提示:您应该导入 JOIN -from peewee import JOIN
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)