Hello,
i just got started with SA and tried to follow the polymorphic loading
example from:
http://www.sqlalchemy.org/docs/adv_datamapping.myt#advdatamapping_inheritance_multiple

(the example needed some modifications: %s/Person/Employee/g)

However polymorphic loading seems broken with SA 0.2.5.

An interactive session with the attached file results in:

>>> from polymorphic import *

>>> create_some_employees()

>>> session.query(Engineer).select()
[Engineer Kurt knows how to hack]

>>> session.query(Employee).select()
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "build/bdist.linux-i686/egg/sqlalchemy/orm/session.py", line 179,
in query
  File "build/bdist.linux-i686/egg/sqlalchemy/orm/query.py", line 28, in
__init__
AttributeError: 'Mapper' object has no attribute 'pks_by_table'


Did i miss something or is this a newly introduced bug?

Cheers, Sol.
from sqlalchemy import *

db = create_engine('postgres:///satest')
metadata = BoundMetaData(db)

session = create_session()

class Employee(object):
    def __init__(self, name):
        self.name = name
    def __repr__(self):
        return self.__class__.__name__ + " " + self.name

class Manager(Employee):
    def __init__(self, name, manager_data):
        self.name = name
        self.manager_data = manager_data
    def __repr__(self):
        return self.__class__.__name__ + " " + self.name + " " +  self.manager_data

class Engineer(Employee):
    def __init__(self, name, engineer_info):
        self.name = name
        self.engineer_info = engineer_info
    def __repr__(self):
        return self.__class__.__name__ + " " + self.name + " " +  self.engineer_info


people = Table('people', metadata, 
    Column('person_id', Integer, primary_key=True),
    Column('name', String(50)),
    Column('type', String(30)))

engineers = Table('engineers', metadata, 
    Column('person_id', Integer, ForeignKey('people.person_id'), primary_key=True),
    Column('engineer_info', String(50)),
    )

managers = Table('managers', metadata, 
    Column('person_id', Integer, ForeignKey('people.person_id'), primary_key=True),
    Column('manager_data', String(50)),
    )



person_join = polymorphic_union( {
    'engineer':people.join(engineers),
    'manager':people.join(managers),
    'person':people.select(people.c.type=='person'),
    }, None, 'pjoin')

person_mapper = mapper(Employee, people, select_table=person_join, polymorphic_on=person_join.c.type, polymorphic_identity='person')
mapper(Engineer, engineers, inherits=person_mapper, polymorphic_identity='engineer')
mapper(Manager, managers, inherits=person_mapper, polymorphic_identity='manager')



def create_some_employees():
    people.create()
    engineers.create()
    managers.create()
    session.save(Manager('Tom', 'knows how to manage things'))
    session.save(Engineer('Kurt', 'knows how to hack'))
    session.flush()



-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Sqlalchemy-users mailing list
Sqlalchemy-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users

Reply via email to