Hi,
Is there a solution for this issue today? Now I have a single table 
Inheritance in table A, however, the type information is stored in another 
table B linked from A with foreign key...
Now if I want to get polymorphic result when querying A, I got error ask me 
to either use polymorphic or set enable_typechecks to False. 
Any idea how to solve this? (After 3+ years)?

On Thursday, May 20, 2010 12:22:34 PM UTC-7, Richard K wrote:
>
> Hi Timmy and Michael,
>
> I was wandering here about the same problem. I have a table that defines 
> keys and value type (ie: key 'username', type 'unicode max 60' - that it is 
> a constant).
>
> Then, I have the values table, which is polymorphic on value type and also 
> has a fk to keys table. I think it is a bit lame to duplicate value type in 
> those two tables, and also not that useful to use the polymorphic as a 
> "static" value on each record of value table since I already have it on 
> keys table. By having a fk to keys table, can't I get the polymorphic value 
> from there?
>
> Thanks in advance,
> Richard.
>
> On Wed, May 5, 2010 at 6:47 PM, Timmy Chan <[email protected]<javascript:>
> > wrote:
>
>> thx, that is what i am wondering.  they are one-to-one, maybe thats good 
>> enough for performance.  so there's no easy way to do this.
>>
>>
>> On Wed, May 5, 2010 at 5:44 PM, Michael Bayer 
>> <[email protected]<javascript:>
>> > wrote:
>>
>>>
>>> I meant SQL.    if you want to do polymorphic_on based on "a.type" it 
>>> would at the very least need to issue:
>>>
>>> SELECT c.*, a.type JOIN b ON c.b_id = b.id JOIN a ON b.a_id=a
>>>
>>> which is an expensive way to get to where you're going.   It can be done 
>>> of course but not through relation().
>>>
>>>
>>> On May 5, 2010, at 5:36 PM, Timmy Chan wrote:
>>>
>>> "C"/"D" objects doesn't exist without "A" and "B"?  maybe walk up the 
>>> graph:  C.b.a.type
>>>
>>> im not sure this schema is sensible, if it's really bad, please advise, 
>>> im not attached to it!
>>>
>>> thax!
>>>
>>> On Wed, May 5, 2010 at 5:28 PM, Michael Bayer 
>>> <[email protected]<javascript:>
>>> > wrote:
>>>
>>>> what query do you want to see when you select "C" and "D" objects ?
>>>>
>>>>
>>>>
>>>> On May 5, 2010, at 5:26 PM, Timmy Chan wrote:
>>>>
>>>> thx, is there a way to set that up, or something similar?
>>>>
>>>> after giving it thought, maybe polymorphic_on isn't what i need.  in 
>>>> some sense, table "A" is similar to a generic container, and i want to 
>>>> constrain the type of "C" depending on "A"'s type column.  is there a way 
>>>> to do this?
>>>>
>>>> On Wed, May 5, 2010 at 5:15 PM, Michael Bayer 
>>>> <[email protected]<javascript:>
>>>> > wrote:
>>>>
>>>>>
>>>>> On May 5, 2010, at 5:01 PM, Timmy Chan wrote:
>>>>>
>>>>> i have 4 tables, a, b, c, d.
>>>>>
>>>>> a has one-to-many relation with b, b with one-to-one relationship with 
>>>>> c, c is a polymorphic on a.type, with d being one of the polymorphic 
>>>>> types.
>>>>>
>>>>> is there a way to implement this?
>>>>>
>>>>> details:
>>>>>
>>>>> this is what im trying to do in sqlalchemy:
>>>>>
>>>>>     a = Table('a', metadata,
>>>>>               Column( 'id', Integer(), primary_key=True ),
>>>>>               Column( 'type', UnicodeText() ) )
>>>>>
>>>>>     b = Table('b', metadata,
>>>>>               Column( 'id', Integer(), primary_key=True ),
>>>>>               Column( 'a_id', Integer(), ForeignKey('a.id') ) )
>>>>>
>>>>>     c = Table('c', metadata,
>>>>>               Column( 'id', Integer(), primary_key=True ),
>>>>>               Column( 'b_id', Integer(), ForeignKey('b.id') ),
>>>>>               Column( 'class_id', Integer() ) )
>>>>>       
>>>>>     d = Table('d', metadata,
>>>>>               Column( 'id', Integer(), primary_key=True ),
>>>>>               Column( 'data', Integer() )
>>>>>
>>>>> mappers
>>>>>
>>>>>     mapper( A, a )
>>>>>     mapper( B, b, properties={'a': relationship( A, 
>>>>> uselist=False,backref='b',
>>>>>            'c':relationship( C, uselist=False, backref='b') })
>>>>>
>>>>>     # Does a full join, does not work
>>>>>     mapper( C, c, polymorphic_on = a.c.type )
>>>>>     mapper( D, d, inherits=C, polymorphic_identity = "D" )
>>>>>
>>>>>
>>>>> how can i change c to polymorphic on a, through the relationship?   is 
>>>>> there a way to sort by d.data?  (b-c/d is one-on-one).
>>>>>
>>>>>
>>>>> this mapping is incorrect.     mapper(C) cannot be polymorphic on a 
>>>>> table which is not part of its mapping, and mapper(C) does not contain an 
>>>>> "inherits" keyword to that of A.   Usually the "polymorphic_on" setting 
>>>>> is 
>>>>> on the base-most mapper in the hierarchy and its not clear here which 
>>>>> mapper you intend for that to be.
>>>>>
>>>>>
>>>>>
>>>>> -- 
>>>>> You received this message because you are subscribed to the Google 
>>>>> Groups "sqlalchemy" group.
>>>>> To post to this group, send email to 
>>>>> [email protected]<javascript:>
>>>>> .
>>>>> To unsubscribe from this group, send email to 
>>>>> [email protected] <javascript:>.
>>>>> For more options, visit this group at 
>>>>> http://groups.google.com/group/sqlalchemy?hl=en.
>>>>>
>>>>
>>>>
>>>> -- 
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "sqlalchemy" group.
>>>> To post to this group, send email to [email protected]<javascript:>
>>>> .
>>>> To unsubscribe from this group, send email to 
>>>> [email protected] <javascript:>.
>>>> For more options, visit this group at 
>>>> http://groups.google.com/group/sqlalchemy?hl=en.
>>>>
>>>>
>>>>
>>>> -- 
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "sqlalchemy" group.
>>>> To post to this group, send email to [email protected]<javascript:>
>>>> .
>>>> To unsubscribe from this group, send email to 
>>>> [email protected] <javascript:>.
>>>> For more options, visit this group at 
>>>> http://groups.google.com/group/sqlalchemy?hl=en.
>>>>
>>>
>>>
>>> -- 
>>> You received this message because you are subscribed to the Google 
>>> Groups "sqlalchemy" group.
>>> To post to this group, send email to [email protected]<javascript:>
>>> .
>>> To unsubscribe from this group, send email to 
>>> [email protected] <javascript:>.
>>> For more options, visit this group at 
>>> http://groups.google.com/group/sqlalchemy?hl=en.
>>>
>>>
>>>  -- 
>>> You received this message because you are subscribed to the Google 
>>> Groups "sqlalchemy" group.
>>> To post to this group, send email to [email protected]<javascript:>
>>> .
>>> To unsubscribe from this group, send email to 
>>> [email protected] <javascript:>.
>>> For more options, visit this group at 
>>> http://groups.google.com/group/sqlalchemy?hl=en.
>>>
>>
>>  -- 
>> You received this message because you are subscribed to the Google Groups 
>> "sqlalchemy" group.
>> To post to this group, send email to [email protected]<javascript:>
>> .
>> To unsubscribe from this group, send email to 
>> [email protected] <javascript:>.
>> For more options, visit this group at 
>> http://groups.google.com/group/sqlalchemy?hl=en.
>>
>
>  -- 
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> To post to this group, send email to [email protected]<javascript:>
> .
> To unsubscribe from this group, send email to 
> [email protected] <javascript:>.
> For more options, visit this group at 
> http://groups.google.com/group/sqlalchemy?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to