ping?

On Dec 13, 2006, at 10:40 AM, isaac wrote:

Hi all,

I'm just getting my feet wet with SQLAlchemy and was having trouble getting polymorphic inheritance to work... so after a little messing around I came up with this simple model.py...

I'd just like to share this and see if somebody has a better way before trying to post it on the docs site...

from datetime import datetime
from turbogears.database import metadata, session
from sqlalchemy import *
from sqlalchemy.ext.activemapper import ActiveMapper, column, \
one_to_many, one_to_one, many_to_many
from sqlalchemy.ext.assignmapper import assign_mapper


class Person(ActiveMapper):
    class mapping:
        __table__ = 'person'
        person_id = column(Integer, primary_key=True)
        name = column(Unicode)
        poly = column(Unicode(30))


class Jerk(Person):
    class mapping:
        __table__ = 'jerk'
jerk_id = column(Integer, foreign_key='person.person_id', primary_key=True)
        smelly = column(Boolean, default=False)

    def __init__(self, *args, **kwargs):
        """Hack to make polymorphic inheritance work.
           Only needed on inherited classes."""
        super(Jerk, self ).__init__(*args,**kwargs)
        self.poly = 'jerk'



person_table = Person.table
jerk_table = Jerk.table

people_join = polymorphic_union(
    {
        'jerk' : Person.table.join(Jerk.table),
'person' : person_table.select(person_table.c.poly == 'person')
    }, None, 'pjoin'
)


person_mapper = class_mapper(Person)
person_mapper.select_table = people_join
person_mapper.polymorphic_on = people_join.c.poly
person_mapper.polymorphic_identity = 'person'

jerk_mapper = class_mapper(Jerk)
jerk_mapper.polymorphic_identity = 'jerk' # leave this in case it's fixed later






--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"TurboGears" 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/turbogears?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to