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