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

Reply via email to