If it's simply a matter of sequence of how code is organized: 1. Define Merchants table and mappers 2. Define Deals table and mappers 3. Add relations to Merchant All of this can be in separate files if needed; just import right definitions where needed.
metadata = MetaData() merchants = Table('merchants', metadata, Column('id', Integer, primary_key=True), Column('name', String) ) class Merchant(object): pass mapper(Merchant, merchants) deals = Table('deals', metadata, Column('id', Integer, primary_key=True), Column('merch_id', Integer, ForeignKey('merchants.id')), Column('deal_status', String(10)) ) class Deal(object): pass mapper(Deal, deals) Merchant.all_deals = relation(Deal, backref='merchant') Merchant.active_deals = relation(Deal, primaryjoin= and_(merchants.c.id==deals.c.merch_id, deals.c.deal_status=='active')) This is one advantage of using declarative because the primaryjoin can be defined as a string that will not be compiled until later. That can be deferred until after everything is defined. -- Mike Conley On Thu, Nov 11, 2010 at 1:33 PM, Jonathan Gardner < jgard...@jonathangardner.net> wrote: > This is what I need to do, except the Merchant object is defined > before the Deal object. In the example in the documentation, I have > mapped User before I have mapped Address. > > -- 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.