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
-~----------~----~----~----~------~----~------~--~---