Right, I missed that part.

Thanks for the explanation...

On Jun 5, 12:02 pm, Michael Bayer <[EMAIL PROTECTED]> wrote:
> 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
-~----------~----~----~----~------~----~------~--~---

Reply via email to