Skip to content

Instantly share code, notes, and snippets.

@storborg
Created January 26, 2011 23:23
Show Gist options
  • Select an option

  • Save storborg/797741 to your computer and use it in GitHub Desktop.

Select an option

Save storborg/797741 to your computer and use it in GitHub Desktop.
from sqlalchemy import MetaData, Column, ForeignKey, types, create_engine, orm
from sqlalchemy.ext.declarative import declarative_base, declared_attr
engine = create_engine('sqlite://')
sm = orm.sessionmaker(bind=engine)
metadata = MetaData()
metadata.bind = engine
Base = declarative_base(metadata=metadata)
class PolymorphicMixin(object):
discriminator = Column(types.String(50))
@declared_attr
def __mapper_args__(cls):
ret = {'polymorphic_identity': cls.__name__}
if Base in cls.__bases__:
ret['polymorphic_on'] = cls.discriminator
return ret
class Employee(Base, PolymorphicMixin):
__tablename__ = 'employees'
id = Column(types.Integer, primary_key=True)
name = Column(types.String(50))
class Developer(Employee):
language = Column(types.String(50), default='python')
class Hacker(Developer):
editor = Column(types.String(50), default='vim')
#### use it ####
metadata.create_all()
sess = orm.scoped_session(sm)
dev = Developer(name='joe')
sess.add(dev)
hacker = Hacker(name='sam')
sess.add(hacker)
sess.commit()
print "**** employees ****"
print sess.query(Employee).all()
print "**** hackers ****"
print sess.query(Hacker).all()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment