Something like this? The association table is declared in the relationships,
but never referenced when creating or accessing objects.

class Assoc(Base):
    __tablename__ = 'assoc'
    parent = Column(Integer, ForeignKey('m_to_n.id'), primary_key=True)
    child = Column(Integer, ForeignKey('m_to_n.id'), primary_key=True)

class MToN(Base):
    __tablename__ = 'm_to_n'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    children = relation('MToN', secondary=Assoc.__table__,
            primaryjoin='MToN.id==Assoc.parent',
            secondaryjoin='MToN.id==Assoc.child',
            backref=backref('parents')
        )
    def __repr__(self):
        return "<M:N %s %s>" % (self.id, self.name)

metadata.create_all()
compile_mappers()

p1 = MToN(name='P1')
p2 = MToN(name='P2')
p3 = MToN(name='P3')
c1 = MToN(name='C1')
c1a = MToN(name='C1A')
c2 = MToN(name='C2')
c3 = MToN(name='C3')
p1.children.append(c1)
p1.children.append(c1a)
c1.children.append(c2)
p2.children.append(c1)
c3.parents.append(p1)
c3.parents.append(p3)
session.add_all([p1, p2, p3])

session.commit()

engine.echo=False
qry_p = session.query(MToN).filter(MToN.name.like('P%'))
for p in qry_p:
    print '======'
    print p
    for ch1 in p.children:
        print '  ', ch1
        for ch2 in ch1.children:
            print '     ',ch2

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

Reply via email to