4
假设我们有这三种模型。是否有可能使用peewee python ORM在几个字段上进行sql连接?
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))
)
感谢您的回答@coleifer。我尝试了你的建议,但是我得到一个错误。 Peewee在这种连接条件下生成错误的sql – 2015-03-28 22:10:34
它使这个sql'SELECT't1'。'id','t1'。'description'FROM'item'AS t1 LEFT OUTER JOIN'useranswer'AS t2 ON(('t2' ('t2'。'id'IS%s)[1,None]'.'item_id'='item'AS t1)AND('t2'。'user_id'=%s))。它在on子句中有一个错误ON((''t2'。'item_id'='item'AS t1)'。它必须是'ON((''''''item_id'='t1'。'id')。 '。我必须做些什么才能使它工作?) – 2015-03-28 22:19:32
然后让它成为'(UserAnswer.id == 1)'而不是'(UserAnswer.user == 1)'。我敢打赌,如果你看着它并思考它你已经能够弄清楚了! – coleifer 2015-03-30 00:03:27