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