簡體   English   中英

是否可以使用 peewee python ORM 在多個字段上進行 sql join?

[英]Is it possible to make sql join on several fields using peewee python ORM?

假設我們有這三個模型。

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')

我想獲取當前用戶沒有相關UserAnswer記錄的所有Items 在 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

抱歉,沒有使用多個連接條件的示例,但on只是一個任意表達式,因此您可以在其中放置任何您喜歡的有效 peewee“表達式”。

重要提示:您應該導入 JOIN - from peewee import JOIN

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM