Dear List,
I have an issue with single table inheritance and sqlalchemy
version 0.5.2. Specifically, I want to disable polymorphic load when
querying over a set of objects that are within a single-table-
inheritance. The normal way of using 'with_polymorphic(cls)' does not
seem to work properly here (the three queries at the end of the
provided code all return the same list of objects).
I would be grateful if someone could read the short piece of code
and give me advice for how to retrieve only the 'Jon Doe' object of
the base class with the query. Thanks a lot.
-sven
import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.orm import mapper, relation
from sqlalchemy.orm import sessionmaker
from sqlalchemy import Table, Column, Integer, String, MetaData,
ForeignKey
engine = create_engine('sqlite:///:memory:', echo=False)
metadata = MetaData()
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
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('engineer_info', String(50)),
)
managers = Table('managers', metadata,
Column('employee_id', Integer, ForeignKey('employees.employee_id'),
primary_key=True),
Column('manager_data', String(50)),
)
metadata.create_all(engine)
mapper(Employee, employees, polymorphic_on=employees.c.type,
polymorphic_identity='employee')
mapper(Engineer, engineers, inherits=Employee,
polymorphic_identity='engineer')
mapper(Manager, managers, inherits=Employee,
polymorphic_identity='manager')
b = Employee('Jon Doe')
m = Manager('Jay Smith', 'Bailout Money')
e = Manager('Zephran Cochran', 'Hammer')
Session = sessionmaker(bind=engine)
session = Session()
session.add(b)
session.add(m)
session.add(e)
session.commit()
print session.query(Employee).all()
print session.query(Employee).with_polymorphic(Employee).all()
print session.query(Employee).with_polymorphic('*').all()
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---