簡體   English   中英

在sqlalchemy中,如何通過使列條目相同來組合兩個查詢?

[英]In sqlalchemy, how can I combine two queries by having a column entry identical?

假設我有一個映射類User ,映射到同名表,以及一個年齡段的“age”列。 我現在對以下問題感興趣:

在我的申請過程中,出現了兩個問題:

q1 = session.query(User).filter(lots of conditions)
q2 = session.query(User).filter(lots of other conditions)

我現在想在q1上加入q2,條件是它們具有相同的年齡。 但我不知道這可能如何運作。 我嘗試了以下但沒有成功:

q1.join(q2.subquery(), q1.age==q2.age) # the query doesn't hold the columns of the queried class
q1.join(Age).join(q2.subquery()) # Works only if age is a relationship with mapped class Age

我最近的電話是這樣的:

a1 = aliased(User)
a2 = aliased(User)
q1 = session.query(a1)
q2 = session.query(a2)
s = q2.subquery()
q1.join(s, a1.age==a2.age).all()
>>> sqlalchemy.exc.OperationalError: (OperationalError) no such column: user_2.age 'SELECT user_1.id AS user_1_id, user_1.name AS user_1_name, user_1.age AS user_1_age \nFROM user AS user_1 JOIN (SELECT user_2.id AS id, user_2.name AS name, user_2.age AS age \nFROM user AS user_2) AS anon_1 ON user_1.age = user_2.age' ()

有關如何運行的任何想法?

在擺弄並閱讀有關子查詢的問題的答案后,我設法找到了解決方案。 而不是最后一個違規行,放:

q1.join(s, a1.age==s.columns.age).all()

這樣,on-clause變為ON user_1.age = anon_1.age ,這就是我們想要的。

暫無
暫無

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

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