from sqlalchemy import *from sqlalchemy.orm import *from sqlalchemy.ext.declarative import declarative_basebase = declarative_base()class Person(base): __tablename__ = 'person' id = Column(Integer, primary_key=True) name = Column(String(50))class SexyParty(base): __tablename__ = 'sexy_party' id = Column(Integer, primary_key=True) guests = relationship('Person', secondary='guest_association', lazy='dynamic', backref='parties')guest_association = Table( 'guest_association', base.metadata, Column('user_id', Integer(), ForeignKey('person.id'), primary_key=True), Column('sexyparty_id', Integer(), ForeignKey('sexy_party.id'), primary_key=True))e = create_engine("sqlite://", echo=True)base.metadata.create_all(e)sess = Session(e)p1 = Person(id=1, name='p1')p2 = Person(id=2, name='p2')p3 = Person(id=3, name='p3')p4 = Person(id=4, name='p4')sp1 = SexyParty(id=1)sess.add_all([sp1, p1, p2, p3, p4])sess.commit()# method one. use insert()sess.execute(guest_association.insert().values([(1, 1), (2, 1)]))# method two. map, optional association proxyfrom sqlalchemy.ext.associationproxy import association_proxyclass GuestAssociation(base): __table__ = guest_association party = relationship("SexyParty", backref="association_recs")SexyParty.association_ids = association_proxy( "association_recs", "user_id", creator=lambda uid: GuestAssociation(user_id=uid))sp1.association_ids.extend([3, 4])sess.commit()