On Jun 5, 2008, at 11:42 AM, Tomer wrote:
> > Worked like magic!! Thanks! > > BTW, why wasn't SQLA able to determine this automatically like it > usually does? when you join PersistentImage->PersistentImage, theres two ways to join on foreign keys between those (remember that a PersistentImage is also an Image). So SQLA reports that this is ambiguous. > > > On Jun 5, 11:30 am, Michael Bayer <[EMAIL PROTECTED]> wrote: >> On Jun 5, 2008, at 11:18 AM, Tomer wrote: >> >> >> >> >> >>> Hi, >> >>> I have two tables: Image and PersistentImage, where the latter >>> inherits the former. In addition, PersistentImage has a foreign >>> key to >>> itself (ie, all PersistentImage objects form a hierarchy among >>> themselves). I haven't been able to get this to work - first it >>> complained about wanting a primaryjoin, then it seemed to get >>> confused >>> between the parent/children relation among PersistentImage objects >>> and >>> the inheritance between PersistentImage and Image. Here are my >>> mappers: >> >>> mapper( >>> Image, >>> imageTable, >>> polymorphic_on=imageTable.c.type, >>> polymorphic_identity='Image' >>> ) >> >>> mapper( >>> PersistentImage, >>> persistentImageTable, >>> inherits=Image, >>> polymorphic_identity='PersistentImage', >>> properties={ >>> 'children': relation(PersistentImage, backref='parent') >>> }) >> >>> And here are the actual table definitions: >> >>> imageTable = Table('Images', metadata, >>> Column('id', Integer, primary_key=True), >>> Column('name', String(256), nullable=False), >>> Column('type', String(30), nullable=False) >>> ) >> >>> persistentImageTable = Table('PersistentImages', metadata, >>> Column('id', Integer, ForeignKey('Images.id'), primary_key=True), >>> Column('parentId', Integer, ForeignKey('PersistentImages.id')), >>> Column('userId', Integer, ForeignKey('Users.id'), nullable=False) >>> ) >> >> here it is: >> >> mapper(PersistentImage, persistentImageTable, inherits=Image, >> inherit_condition=persistentImageTable.c.id==imageTable.c.id, >> polymorphic_identity='PersistentImage', >> properties={ >> 'children':relation(PersistentImage, >> primaryjoin >> =persistentImageTable.c.parentId==persistentImageTable.c.id, >> backref=backref('parent', >> primaryjoin >> =persistentImageTable.c.parentId==persistentImageTable.c.id, >> remote_side=[persistentImageTable.c.id]) >> ) >> }) >> >> SQLA would probably slightly happier if you had the "parentId" >> foreign >> key referencing Images.id instead of PersistentImages.id but this >> should not be required. > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---