I'm new to SQLAlchemy (but not python ORMs *cough*SQLObject*cough*)
and I really like the idea of Joined Table Inheritance, and the
example in the Documentation makes it look really elegant
http://www.sqlalchemy.org/docs/04/mappers.html#advdatamapping_mapper_inheritance_joined

My question is what if you wanted to add a 'hired' field to say the
employees table & object (from the example in that link) that
references a manager object.  In this way I imagine that we are making
another reference to an employee object and might be an issue when
trying to figure out the join.  So I'd imagine that the tables look
like:

employees = Table('employees', metadata,
   Column('employee_id', Integer, primary_key=True),
   Column('name', String(50)),
   Column('type', String(30), nullable=False)
)
engineers = Table('engineers', metadata,
   Column('employee_id', Integer, ForeignKey('employees.employee_id'),
primary_key=True),
   Column('hired_by_id',Integer,ForeignKey('managers.employee_id')),
#######INTERESTING PART
   Column('engineer_info', String(50)),
)
managers = Table('managers', metadata,
   Column('employee_id', Integer, ForeignKey('employees.employee_id'),
primary_key=True),
   Column('manager_data', String(50)),
)

and the mappers look like:

mapper(Employee, employees, polymorphic_on=employees.c.type,
polymorphic_identity='employee')
mapper(Engineer, engineers, inherits=Employee,
polymorphic_identity='engineer',
    properties={
        'hirer':relation(Manager,uselist=False,backref='hired')
    })
mapper(Manager, managers, inherits=Employee,
polymorphic_identity='manager')


But the error message you'd get if you do this is:
sqlalchemy.exceptions.ArgumentError: Error determining primary and/or
secondary join for relationship 'Engineer.hirer (Manager)'. If the
underlying error cannot be corrected, you should specify the
'primaryjoin' (and 'secondaryjoin', if there is an association table
present) keyword arguments to the relation() function (or for
backrefs, by specifying the backref using the backref() function with
keyword arguments) to explicitly specify the join conditions. Nested
error is "Can't determine join between 'Join object on
employees(14680464) and engineers(14680880)' and '_FromGrouping
object'; tables have more than one foreign key constraint relationship
between them. Please specify the 'onclause' of this join explicitly."

Might I add that this is an extremely informative error message!

Basically, my question is how do I satisfy this requirement as
described by the error message?  I have to make my join more
specific?  How would I do that?

And another question, is Joined Table Inheritance a common thing to do
in SQLAlchemy?

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

Reply via email to