2015-09-27 63 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