Hi All,

I have also created a post for this question on StackOverflow:
http://stackoverflow.com/questions/3863508/joinedload-eager-loading-whole-sub-graphs-in-sqlalchemy

Let's say I have a Task object which can be dependent on other Tasks. Is
there a way to sensibly eager/joinedload all of a given set of task's
subtasks?

Example code:

class Task(DeclarativeBase):
    __tablename__ = 'task'

    task_id = Column(Integer, primary_key=True)
    name = Column(String, unique=True)

    def add_dependencies(self, *tasks):
        for task in tasks:
            TaskDependency(dependent=self, dependency=task)
        return self

    @property
    def dependencies(self):
        return [x.dependency for x in self.dependency_edges]

    @dependencies.setter
    def dependencies(self, what):
        "Note: adds dependencies, doesn't remove them"
        self.add_dependencies(*what)

    @property
    def dependents(self):
        return [x.dependent for x in self.dependent_edges]

class TaskDependency(DeclarativeBase):
    __tablename__ = 'task_dependency'

    dependent_id = Column(Integer, ForeignKey(Task.task_id),
primary_key=True)
    dependency_id = Column(Integer, ForeignKey(Task.task_id),
primary_key=True)

    dependent = relationship(Task, primaryjoin=dependent_id ==
Task.task_id,
                             backref='dependent_edges')

    dependency = relationship(Task, primaryjoin=dependency_id ==
Task.task_id,
                              backref='dependency_edges')

def example_task_maker():
    make_cheese = Task(
        name="MAKE_CHEESE",
        dependencies=[
            Task(name="MILK_COWS",
                dependencies=[
                    Task(name="BUY_COWS")
                ]),
        ]
    )


def load_task()
    # How to eagerly load the whole task tree here?
    DBSession.query(Task).filter(name="MAKE_CHEESE").all()

Thanks in advance,

- Peter

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalch...@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