Something exactly like that. Thanks much.
On Nov 8, 11:28 pm, Mike Conley <mconl...@gmail.com> wrote:
> 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
-~----------~----~----~----~------~----~------~--~---