On Feb 3, 2012, at 11:28 AM, cbc wrote:
> Hi:
>
> I'm having trouble getting a subquery to return entities.
>
> class Question(Base):
> __tablename__ = 'question'
> question_id = Column(INTEGER(unsigned=True), primary_key=True)
> ...etc
> q_answers = relationship("Answer", backref="question")
>
> class Answer(Base):
> __tablename__ = 'answer'
> answer_id = Column(INTEGER(unsigned=True), primary_key=True)
> user_id = Column(INTEGER(unsigned=True), ForeignKey('user.user_id'),
> nullable=False)
> question_id = Column(INTEGER(unsigned=True),
> ForeignKey('question.question_id'), nullable=False)
> ...etc
>
> stmt = session.query(Answer).filter(Answer.user_id ==
> user_id).subquery()
> answers = aliased(Answer, stmt)
> query = session.query(Question, answers)\
> .outerjoin(answers, Question.q_answers)\
> .filter(Question.question_group_id == question_group_id)
> questions = query.all()
>
> This generates MySQL that returns all desired columns and returns NULL
> if question has not yet been answered by the specified user. Groovy so
> far.
>
> I was expecting tuples in the list of questions (Answer, Question),
> but the first element is always None. e.g.
>
>>>> dir(questions[0])
> [None, 'Question', ... etc
>
> So while I'm expecting the subquery results to be understood as
> entities (Answer), this isn't happening. But I cannot figure out why.
>
> Where have I failed?
The outerjoin here is from Question to Answer so you should never have None in
the first element of the tuple. I'd need a full reproducing test to see
exactly what would cause Question to be retuned as None.
--
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en.