what is your hierarchy?
why Boss' mapper inherits from person's one, and not from manager's
one?
On Thursday 07 June 2007 19:56:30 Daniele Varrazzo wrote:
> Hello,
>
> i'm trying to generalize the examples in the documentation about
> multiple table inheritance, namely adding a `Boss` subclassing
> `Manger`::
>
> class Boss(Manager): pass
>
> In the db i'd add a::
>
> boss = Table('boss', metadata,
> Column('person_id', Integer,
> ForeignKey('managers.person_id'),
> primary_key=True),
> Column('powers', String(50)))
>
> i tried updating the `person_join` adding an entry to the map::
>
> ...
> 'boss':employees.join(managers).join(boss),
> ...
>
> mapper(Boss, boss,
> inherits=person_mapper,
> polymorphic_identity='boss')
>
> but it fails as soon as a `Boss` instance is created::
>
> ArgumentError: Can't find any foreign key relationships between
> 'employees' and 'boss'
>
> Other tries involved the creation of a most explicit selectable
> objects for 'boss'::
>
> 'boss':employees.join(boss,
> onclause=employees.c.person_id==boss.c.person_id)
> .join(managers,
> onclause=managers.c.person_id==boss.c.person_id),
>
> which typically fail the same way.
>
> I was able to instantiate an object explicitely adding a fkey
> (which is redundant for the DB: i'd prefer to avoid it)::
>
> boss = Table('boss', metadata,
> Column('person_id', Integer,
> ForeignKey('managers.person_id'),
> ForeignKey('employees.person_id'),
> primary_key=True),
>
> 'boss':employees.join(managers).join(boss,
> onclause=managers.c.person_id==boss.c.person_id),
>
> but the records are not created in the proper order and
> serialization
>
> fails::
> >>> ses.save(b)
> >>> ses.flush()
>
> INFO sqlalchemy.engine.base.Engine.0x..34 BEGIN
> INFO sqlalchemy.engine.base.Engine.0x..34 select
> nextval('"employees_person_id_seq"')
> INFO sqlalchemy.engine.base.Engine.0x..34 INSERT INTO employees
> (person_id, name, type) VALUES ...
> INFO sqlalchemy.engine.base.Engine.0x..34 INSERT INTO boss
> (person_id, powers) VALUES ...
> INFO sqlalchemy.engine.base.Engine.0x..34 ROLLBACK
>
> SQLError: (IntegrityError) insert or update on table "boss"
> violates foreign key constraint "boss_person_id_fkey1"
> DETAIL: Key (person_id)=(4) is not present in table
> "managers".
>
> Can an inheritance schema like this be implemented with a
> `polymorphic_union`? Any suggestion?
>
> A complete solution would be to fetch a "boss" onto a polymorphic
> fetch for managers (or for persons of course)
>
> Thank you very much,
>
> -- Daniele
>
>
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected]
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
-~----------~----~----~----~------~----~------~--~---