Thanks for the quick reply. I'll give it a try.
2011/4/8 Michael Bayer <mike...@zzzcomputing.com>: > > On Apr 8, 2011, at 12:12 PM, Hector Blanco wrote: > >> Hello everyone: >> >> I have a tree-like structure (groups/nodes, basically) with Stores and >> StoreGroups. An store can belong only to one storeGroup, but an >> StoreGroup can contain stores or other storeGroups: >> >> class StoreGroup(BaseClass.BaseClass, Database.Base): >> """Represents a storeGroup""" >> __tablename__ = "store_groups" >> _id = Column("id", Integer, primary_key=True) >> _name = Column("name", String(50)) >> >> _storeGroups = relationship("StoreGroup", >> secondary=store_group_groups, order_by=lambda:StoreGroup.name, >> primaryjoin=lambda: StoreGroup.id == >> store_group_groups.c.store_groupA_id, >> secondaryjoin=lambda: StoreGroup.id == >> store_group_groups.c.store_groupB_id, >> backref="parentGroup", >> collection_class=set) >> #_stores > Backref from "Store" class >> >> class Store(BaseClass.BaseClass, Database.Base): >> """Represents a store""" >> __tablename__ = "stores" >> _id = Column("id", Integer, primary_key=True) >> _name = Column("name", String(50)) >> _number = Column("number", Integer) >> _timeZone = Column("time_zone", String(20)) >> >> _storeGroupId = Column("store_group_id", Integer, >> ForeignKey("store_groups.id")) >> _storeGroup = relationship("StoreGroup", uselist=False, >> backref=backref("_stores", >> order_by=lambda:Store.name, >> collection_class=set) >> ) >> >> So I would like to have a way to, given an "StoreGroup" id, to >> recursively iterate through the hierarchy (StoreGroup.storeGroups) and >> grab all the "Stores" found on said hierarchy. >> >> I have seen the example: >> http://www.sqlalchemy.org/trac/browser/examples/adjacency_list/adjacency_list.py >> >> but that needs the depth to look in in advance. >> >> I also saw: >> http://groups.google.com/group/sqlalchemy/msg/80ea8e712380bff4 >> >> where apparently there's no "sqlalchemistic" way of doing it (it needs >> sql tools and raw queries). I was hoping that maaaaybe the information >> I have is outdated, and it's doable now (using SqlAlchemy 0.6.6) > > that link doesn't appear to be relevant to what you are asking here. To > iterate as you asked, that would be: > > group = session.query(StoreGroup).filter(StoreGroup._id==id).one() > > stack = [group] > while stack: > g = stack.pop() > for store in g._stores: > do_something_with(store) > stack.extend(g._storeGroups) > > > > -- > 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. > > -- 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.