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