On Jun 21, 10:02 pm, Michael Bayer <mike...@zzzcomputing.com> wrote:
> yes please see the "polymorphic association" example included in the > distribution . Thanks! It seems there's nothing SQLAlchemy can't do :). Btw, since the examples are a bit complicated, here is just for reference in case someone comes by this thread later, a simpler example: TAGS = Table('tags', meta, Column('id', Integer, primary_key=True), Column('type', String), Column('object_id', Integer), Column('name', String)) DOGS = Table('dogs', meta, Column('id', Integer, primary_key=True), Column('name', String)) CATS = Table('cats', meta, Column('id', Integer, primary_key=True), Column('name', String)) class Tag(object): def __init__(self, type, name): self.type, self.name = type, name def __repr__(self): return u'<Tag {self.type}: {self.name}>'.format(self=self) class Dog(object): def __init__(self, name): self.name = name def __repr__(self): return u'<Dog {self.id}:{self.name}>'.format(self=self) class Cat(object): def __init__(self, name): self.name = name def __repr__(self): return u'<Cat {self.id}:{self.name}>'.format(self=self) tags_mapper = mapper(Tag, TAGS) dogs_mapper = mapper(Dog, DOGS) cats_mapper = mapper(Cat, CATS) # Magic happens below pj = and_(DOGS.c.id == TAGS.c.object_id, TAGS.c.type == 'dog') fk = [TAGS.c.object_id] dogs_mapper.add_property('tags', relationship(Tag, primaryjoin=pj, uselist=True, foreign_keys=fk)) pj = and_(CATS.c.id == TAGS.c.object_id, TAGS.c.type == 'cat') cats_mapper.add_property('tags', relationship(Tag, primaryjoin=pj, uselist=True, foreign_keys=fk)) >From now on it's simple: dog = Dog('Goofy') tag1, tag2 = Tag(type='dog', name='stray'), Tag(type='dog', name='vaccinated') dog.tags = [tag1, tag2] -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalch...@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.