Hi,
All the docs only explain how to do inheritance using a simple "parent
> child" model. But what about "parent > child > grandchild"? I tried
the following but I get an error:
<code>
thing_table = Table( 'thing', metadata,
Column( 'uuid', String(36), primary_key=True,
default=func.uuid_generate_v1() ),
Column( 'reporter', String(30), nullable=False )
Column( 'type', String(30), nullable=False )
)
mineral_table = Table('mineral', metadata,
Column('uuid', String(36), primary_key=True, ForeignKey
('thing.uuid')),
Column( 'family', String(30), nullable=False )
);
crystal_table = Table( 'crystal', metadata,
Column('uuid', String(36), ForeignKey('mineral.uuid')),
Column('label', String(30)))
class Thing(object): pass
class Mineral(Thing): pass
class Crystal(Mineral): pass
mapper( Thing, thing_table, polymorphic_on=thing_table.c.type,
polymorphic_identity='thing' )
mapper(Mineral, mineral_table, inherits=Thing,
polymorphic_identity='mineral')
mapper(Crystal, crystal_table, inherits=Mineral,
polymorphic_identity='crystal')
</code>
When I create the mappings like this, the model loads correctly, but I
cannot create "Crystal" instances:
>>> x = Crystal()
>>> x.family='kjdfh'
>>> session.save(x)
>>> session.flush()
2009-11-05 01:21:32,795 sqlalchemy.engine.base.Engine.0x..2c INFO
BEGIN
2009-11-05 01:21:32,801 sqlalchemy.engine.base.Engine.0x..2c INFO
SELECT uuid_generate_v1() AS uuid_generate_v1_1
2009-11-05 01:21:32,801 sqlalchemy.engine.base.Engine.0x..2c INFO {}
2009-11-05 01:21:32,805 sqlalchemy.engine.base.Engine.0x..2c INFO
INSERT INTO thing (uuid, type) VALUES (%(uuid)s, %(type)s)
2009-11-05 01:21:32,806 sqlalchemy.engine.base.Engine.0x..2c INFO
{'type': 'rock', 'uuid': '2bb7593c-c9a1-11de-8367-001d720c19db'}
2009-11-05 01:21:32,814 sqlalchemy.engine.base.Engine.0x..2c INFO
INSERT INTO mineral (uuid, family) VALUES (%(uuid)s, %(family)s)
2009-11-05 01:21:32,815 sqlalchemy.engine.base.Engine.0x..2c INFO
{'uuid': '2bb7593c-c9a1-11de-8367-001d720c19db', 'family': 'kjdfh'}
2009-11-05 01:21:32,896 sqlalchemy.engine.base.Engine.0x..2c INFO
COMMIT
Oddly, the "Crystal" instance is never saved. Any ideas? I am running
this using SQLAlchemy 0.4.6.
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---