2015-09-27 62 views
0

我想在subquery上使用outerjoin操作,並且還包含子查詢中的值。sqlalchemy從子查詢中添加實體

我的代碼

q_responses = session.query(Candidate, CandidateProfile) 
      .join(CandidateProfile, CandidateProfile.candidate_id == Candidate.id) 

subq = (session.query(AppAction.candidate_id, Activity.archived)\ 
     .join(Activity, and_(AppAction.candidate_id == Activity.candidate_id, 
          Activity.archived == 1)))\ 
     .subquery("subq") 
responses = q_responses.outerjoin(subq, Candidate.id == subq.c.candidate_id).all() 

所以我得到的結果在這種格式

(Candidate, CandidateProfile) 

但我也想包括在結果存檔從子查詢值。

通過閱讀從網上很多相關的帖子,我已經試過

  1. add_entity(subq.c.archived)
  2. with_entities
  3. add_column
  4. select_from

但所有這些都導致了一些錯誤。

請幫我一把。

回答

0

請在你嘗試add_column時分享您的經驗。下面的代碼應該只是罰款(假設它的工作不喜歡它包含add_column):

responses = (
    q_responses 
    .add_column(subq.c.archived) # @new 
    .outerjoin(subq, Candidate.id == subq.c.candidate_id) 
).all() 

你也可以創建一個查詢與此列直線距離包括:

subq = (
    session.query(AppAction.candidate_id, Activity.archived) 
    .join(Activity, and_(AppAction.candidate_id == Activity.candidate_id, 
         Activity.archived == 1)) 
).subquery("subq") 

q_responses = (
    session.query(Candidate, CandidateProfile, subq.c.archived) 
    .join(CandidateProfile, CandidateProfile.candidate_id == Candidate.id) 
    .outerjoin(subq, Candidate.id == subq.c.candidate_id) 
).all() 
+0

謝謝!我現在可以從子查詢中獲取這些值到外部查詢。 – Hussain