I'd keep each path separate, i.e.
query.options(*[joinedload_all(path) for path in relationshipsToPreLoad])
On Jan 3, 2011, at 10:55 AM, Hector Blanco wrote:
> Hi list!
>
> I am facing a little problem whose I'm sure has a very simple
> solution, but I haven't been able to find it (the solution, I mean)...
>
> I would like to be able to pass the fields (relationships) I want to
> pre-load as a parameter. Let's say I have a couple of classes:
>
> -------------------------------------------------
> class ElementsGroup(declarativeBase):
> """Represents a group of elements"""
> __tablename__ = "elements_groups"
>
> _id = Column("id", Integer, primary_key=True)
>
> elements = relationship("Element" ... , collection_class=set )
> elementGroups = relationship("ElementGroup", ... ,
> collection_class=set)
> -------------------------------------------------
>
> And then the "Element" class:
>
> -------------------------------------------------
> class Element(declarativeBase):
> __tablename__ = "elements"
>
> _id = Column("id", Integer, primary_key=True)
> otherThings = relationship("Things", ... , collection_class=set)
> -------------------------------------------------
>
> I would like to create a method to load objects of "ElementsGroups"
> that would accept a parameter containing which relationships have to
> be pre-loaded with a joinedload. Something like:
>
> -------------------------------------------------
> class ElementsGroupManager(object):
> @staticmethod
> def getAll(relationshipsToPreLoad=list()):
> retval = list
> try:
> if (relationshipsToPreLoad):
> retval =
> Database.session.query(ElementsGroup.ElementsGroup).options(joinedload_all(relationshipsToPreLoad)).all()
> else:
> retval =
> Database.session.query(ElementsGroup.ElementsGroup).all()
>
> finally:
> Database.session.close()
> return retval
> -------------------------------------------------
>
> And in relationshipsToPreload I can say, for instance:
> ["elements", "elements.otherThings"]
> (and would preload ElementsGroup.elements and the "otherThings" field
> of each "element" object in the ElementsGroup.elements
> list/relationship)
> or
> ["elementGroups"]
> which would just pre-load ElementsGroups.elementGroups (and not the
> ElementsGroups.elements)
>
> I'm sure it's very easy, but I haven't been able to do it... If I try
> to pass relationshipsToPreLoad=['elements', 'elementGroups'] I get
> something like:
>
>> Mapper 'Mapper|Element|elements' has no property 'elementGroups'
>
> It looks like it's trying to load (correctly) ElementsGroups.elements
> but then it's trying to load ElementsGroups.elements.elementGroups
> (which is not what I want... I want to load
> ElementsGroups.elementGroups)
>
> Thanks in advance!
>
> --
> 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.
>
--
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.