Thanks. This is one of those things that I had written before and it worked so I didn't really look back. After I upgraded and it didn't work I somehow missed that obvious point even after staring at it for a long while.
Thanks again, Michael Carter On 6/13/07, Michael Bayer <[EMAIL PROTECTED]> wrote: > > youre expressing the secondary join condition on a many-to-many as shoved > into the primary join. SA will be confused by that, as it requires knowledge > of primary/secondary join conditions separately in order to properly > construct lazy loading criterion. > Group.mapper = mapper(Group, groups, properties = { > 'members': relation(User, viewonly=True, > secondary=membership, > backref='groups', > primaryjoin=and_(membership.c.level==100, > membership.c.group_id==groups.c.id), > secondaryjoin=membership.c.user_id==users.c.id) > }) > > > > On Jun 12, 2007, at 11:53 PM, Michael Carter wrote: > > from sqlalchemy import * > > db = create_engine('sqlite://', echo=True) > > meta = BoundMetaData(db) > > session = create_session() > > > groups = Table("groups", meta, > > Column("id",Integer, primary_key=True), > > Column("name", Unicode(40))) > > membership = Table("membership", meta, > > Column("user_id", Integer, ForeignKey("users.id"), primary_key=True), > > Column("group_id", Integer, ForeignKey("groups.id"), primary_key=True), > > Column("level", Integer)) > > users = Table("users", meta, > > Column("id", Integer, primary_key=True), > > Column("name", Unicode(255))) > > class User(object): > > def __repr__(self): return str(self) > > def __str__(self): return "<User %s: %s>" % (self.id, self.name) > > class Group(object): > > def __repr__(self): return str(self) > > def __str__(self): return "<Group %s: %s>" % (self.id, self.name) > > > class Membership(object): > > def __repr__(self): return str(self) > > def __str__(self): return "<Membership %s, %s: %s>" % (self.user_id, > self.group_id, self.level) > > Group.mapper = mapper(Group, groups, properties = { > > 'members': relation(User, viewonly=True, > > secondary=membership, backref='groups', > > primaryjoin=and_(membership.c.user_id==users.c.id, membership.c.level==100, > membership.c.group_id==groups.c.id)), > > }) > > > User.mapper = mapper(User, users, properties = { > > }) > > > Membership.mapper = mapper(Membership, membership, properties = { > > 'user': relation(User), > > 'group': relation(Group) > > }) > > > meta.drop_all() > > meta.create_all() > > u = User() > > g = Group() > > m = Membership() > > u.name = 'Michael Carter' > > g.name = 'Home' > > m.group = g > > m.user = u > > m.level = 100 > > session.save(u) > > session.save(g) > > session.save(m) > > session.flush() > > print u.groups > > print g.members > > > > > > --~--~---------~--~----~------------~-------~--~----~ 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 [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~----------~----~----~----~------~----~------~--~---