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 [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.