Hello.

I have the following example (Base is the usual declarative_base instance):


class Node(Base):
    __tablename__ = 'node'

    id = Column(Integer(), primary_key=True)
    parent_id = Column(Integer(), ForeignKey('node.id'))

    def path(self, root_id):
        """Query to return a list of nodes once evaluated.
        It starts with the receiver node and continues upwards to the root.
        It stops on a node with id root_id.
        """
        q_base = session.query(Node).filter(Node.id == self.id)
        q_cte = q_base.cte(name='q_cte', recursive=True)
        q_cte_alias = aliased(q_cte, name='q_cte_alias')
        node_alias = aliased(Node, name='node_alias')
        q_rec = session.query(node_alias)
        q_rec = q_rec.filter(node_alias.id == q_cte_alias.c.parent_id)
        q_rec = q_rec.filter(node_alias.id != root_id)
        q_cte_union = q_cte.union_all(q_rec)
        q = session.query(q_cte_union)
        return q

The above query seems to do what I intend but it returns named tuples and not
Node instances. I spent all day searching SA docs but with no luck so far.

Is this possible? If so, how?


Thank you very much in advance,

Ladislav Lenart


-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to