Hi All, We're looking to add tags to a number of 'entities' within our application. A simplified data structure would be:
Image: id file title description Article: id text Tag: id value Entity_tags: id entity_type ('image' or 'article' entity_id (PK of the image/article table) tag_id We've got the following (highly simplified) structure: image_table = Table('image', meta.metadata, Column('id', types.Integer, primary_key=True), ) article_table = Table('article', meta.metadata, Column('id', types.Integer, primary_key=True), ) tag_table = Table('tag', meta.metadata, Column('id', types.Integer, primary_key=True), Column('name', types.Unicode(50), unique=True), ) entity_tag_table = Table('entity_tag', meta.metadata, Column('tag_id', types.Integer, ForeignKey(tag_table.c.id)), Column('entity_type', types.String, nullable=False), Column('entity_id', types.Integer, nullable=False), ) # And the ORM Mappings: class Image(object): pass class Article(object): pass class Tag(object): pass class EntityTag(object): pass orm.mapper(Image, image_table, properties={ 'tags': orm.relation(Tag, secondary=entity_tag_table, primaryjoin=and_(image_table.c.id==EntityTag.entity_id, EntityTag.entity_type=='image'), secondaryjoin=EntityTag.tag_id==Tag.id, foreignkeys=[EntityTag.entity_id, EntityTag.tag_id], ), }) orm.mapper(Article, article_table, properties={ 'tags': orm.relation(Tag, secondary=entity_tag_table, primaryjoin=and_(article_table.c.id==EntityTag.entity_id, EntityTag.entity_type=='article'), secondaryjoin=EntityTag.tag_id==Tag.id, foreignkeys=[EntityTag.entity_id, EntityTag.tag_id], ), }) When we append to the image.tags collection, the entity_tag table needs to know that the entity_type is 'image', but we can't seem to set that. What is the standard way of dealing with this problem? Is there the concept of a generic foreign key in SQLAlchemy? Does anyone know if this database pattern has a formal name? TIA, Jim -- 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.