I have 2 tables Person (id, name) & Employee (id, salary) and every Employee 'isa' Person, so employee.id == person.id. I am trying to use the Concrete Inheritance (i.e. ' pjoin) example provided in the documentation. My mapping looks as follows.
person_table = Table("persons", __meta__, Column("id", Integer, primary_key=True), Column("name", String(80)) ) employee_table = Table("empys", __meta__, Column("id", Integer, ForeignKey("persons.id"), primary_key=True), Column("salary", Integer), ) class Person (object): pass class Employee(Person): pass pjoin = polymorphic_union({ 'person':person_table, 'employee':employee_table }, 'type', 'pjoin') person_mapper = mapper(Person, person_table, select_table=pjoin, \ polymorphic_on=pjoin.c.type, polymorphic_identity='person') emp_mapper = mapper(Employee, employee_table, inherits=person_mapper, \ concrete=True, polymorphic_identity='employee') I want to now add a New employee to the system with the following snippet. e = Employee() e.name = 'TestEmpl' e.salary = 100 session.save(e) session.commit() Problem is when it tries to save employee, sqlalchemy raises the following error """ sqlalchemy.exceptions.ProgrammingError: (ProgrammingError) relation "empys_id_seq" does not exist 'select nextval(\'"empys_id_seq"\')' None """ Since all id's in employees table map directly to Person table (which has the correct sequence), I would think alchemy would first store the "Person" part and then store the "employee" part. Any clues on how to correct this ??. I also tried adding a Sequence to employee forcing it to use the same one as person table... employee_table = Table("empys", __meta__, Column("id", Integer, ForeignKey("persons.id"), Sequence("person_id_seq") primary_key=True), Column("salary", Integer), ) But now it raises a constraint violation because its trying to insert a row in employees table without inserting anything in person first.. Any ideas how I can fix this?.. I would greatly appreciate any help in this regard.. Thanks Partha Here is the full program.. Thanks.. from sqlalchemy import create_engine, MetaData, Table, Column, types, Sequence from sqlalchemy import Table, Column, Integer, String, DECIMAL, Numeric, ForeignKey, DateTime, Boolean, CHAR from sqlalchemy.orm import mapper,sessionmaker, relation, polymorphic_union __meta__ = MetaData() person_table = Table("persons", __meta__, Column("id", Integer, primary_key=True), Column("name", String(80)) ) employee_table = Table("empys", __meta__, Column("id", Integer, ForeignKey("persons.id"), primary_key=True), Column("salary", Integer), ) class Person (object): pass class Employee(Person): pass pjoin = polymorphic_union({ 'person':person_table, 'employee':employee_table }, 'type', 'pjoin') person_mapper = mapper(Person, person_table, select_table=pjoin, \ polymorphic_on=pjoin.c.type, polymorphic_identity='person') emp_mapper = mapper(Employee, employee_table, inherits=person_mapper, \ concrete=True, polymorphic_identity='employee') engine = create_engine('postgres:///test?user=postgres&password=foo', echo=True) session = sessionmaker(autoflush=True, bind = engine, transactional=True)() def refresh(engine = engine): __meta__.drop_all(engine) __meta__.create_all(engine) def main(): refresh() e = Employee() e.name = 'TestEmpl' e.salary = 100 session.save(e) session.commit() if __name__ == '__main__': main() --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---