summaryrefslogtreecommitdiff
path: root/examples/polymorph/polymorph.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2010-01-19 00:53:12 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2010-01-19 00:53:12 +0000
commit40f8aadd582776524d3b98da1f577c2fc95619e7 (patch)
tree753eec3802734f397953976824a252bb60829189 /examples/polymorph/polymorph.py
parent56fe538cc7d81ce264fc6504feb1ead5e17d0f55 (diff)
downloadsqlalchemy-40f8aadd582776524d3b98da1f577c2fc95619e7.tar.gz
- mega example cleanup
- added READMEs to all examples in each __init__.py and added to sphinx documentation - added versioning example - removed vertical/vertical.py, the dictlikes are more straightforward
Diffstat (limited to 'examples/polymorph/polymorph.py')
-rw-r--r--examples/polymorph/polymorph.py104
1 files changed, 0 insertions, 104 deletions
diff --git a/examples/polymorph/polymorph.py b/examples/polymorph/polymorph.py
deleted file mode 100644
index 60ef98f57..000000000
--- a/examples/polymorph/polymorph.py
+++ /dev/null
@@ -1,104 +0,0 @@
-from sqlalchemy import MetaData, Table, Column, Integer, String, ForeignKey
-from sqlalchemy.orm import mapper, relation, create_session
-import sets
-
-# this example illustrates a polymorphic load of two classes
-
-metadata = MetaData('sqlite://')
-metadata.bind.echo = True
-
-# a table to store companies
-companies = Table('companies', metadata,
- Column('company_id', Integer, primary_key=True),
- Column('name', String(50)))
-
-# we will define an inheritance relationship between the table "people" and "engineers",
-# and a second inheritance relationship between the table "people" and "managers"
-people = Table('people', metadata,
- Column('person_id', Integer, primary_key=True),
- Column('company_id', Integer, ForeignKey('companies.company_id')),
- Column('name', String(50)),
- Column('type', String(30)))
-
-engineers = Table('engineers', metadata,
- Column('person_id', Integer, ForeignKey('people.person_id'), primary_key=True),
- Column('status', String(30)),
- Column('engineer_name', String(50)),
- Column('primary_language', String(50)),
- )
-
-managers = Table('managers', metadata,
- Column('person_id', Integer, ForeignKey('people.person_id'), primary_key=True),
- Column('status', String(30)),
- Column('manager_name', String(50))
- )
-
-metadata.create_all()
-
-# create our classes. The Engineer and Manager classes extend from Person.
-class Person(object):
- def __init__(self, **kwargs):
- for key, value in kwargs.iteritems():
- setattr(self, key, value)
- def __repr__(self):
- return "Ordinary person %s" % self.name
-class Engineer(Person):
- def __repr__(self):
- return "Engineer %s, status %s, engineer_name %s, primary_language %s" % (self.name, self.status, self.engineer_name, self.primary_language)
-class Manager(Person):
- def __repr__(self):
- return "Manager %s, status %s, manager_name %s" % (self.name, self.status, self.manager_name)
-class Company(object):
- def __init__(self, **kwargs):
- for key, value in kwargs.iteritems():
- setattr(self, key, value)
- def __repr__(self):
- return "Company %s" % self.name
-
-
-person_join = people.outerjoin(engineers).outerjoin(managers)
-
-person_mapper = mapper(Person, people, polymorphic_on=people.c.type, polymorphic_identity='person')
-mapper(Engineer, engineers, inherits=person_mapper, polymorphic_identity='engineer')
-mapper(Manager, managers, inherits=person_mapper, polymorphic_identity='manager')
-
-mapper(Company, companies, properties={
- 'employees': relation(Person, lazy=False, backref='company', cascade="all, delete-orphan")
-})
-
-session = create_session()
-c = Company(name='company1')
-c.employees.append(Manager(name='pointy haired boss', status='AAB', manager_name='manager1'))
-c.employees.append(Engineer(name='dilbert', status='BBA', engineer_name='engineer1', primary_language='java'))
-c.employees.append(Person(name='joesmith', status='HHH'))
-c.employees.append(Engineer(name='wally', status='CGG', engineer_name='engineer2', primary_language='python'))
-c.employees.append(Manager(name='jsmith', status='ABA', manager_name='manager2'))
-session.add(c)
-
-print session.new
-session.flush()
-session.expunge_all()
-
-c = session.query(Company).get(1)
-for e in c.employees:
- print e, e._sa_instance_state.key, e.company
-assert sets.Set([e.name for e in c.employees]) == sets.Set(['pointy haired boss', 'dilbert', 'joesmith', 'wally', 'jsmith'])
-print "\n"
-
-dilbert = session.query(Person).filter_by(name='dilbert').one()
-dilbert2 = session.query(Engineer).filter_by(name='dilbert').one()
-assert dilbert is dilbert2
-
-dilbert.engineer_name = 'hes dibert!'
-
-session.flush()
-session.expunge_all()
-
-c = session.query(Company).get(1)
-for e in c.employees:
- print e, e._sa_instance_state.key
-
-session.delete(c)
-session.flush()
-
-metadata.drop_all()