minister vs Minister

-k


Excerpts from [email protected]'s message of Mon Nov 28 15:16:38 -0500 2011:
> '''
> vacant.py contains the following:
> '''
> 
> #!/usr/bin/env python
> #This script ran correctly on 2011-11-17
> 
> import cgi
> import cgitb; cgitb.enable()  # for troubleshooting
> 
> print "Content-type: text/html"
> print
> #print "This is working now."
> 
> import csv
> reader = csv.reader(open("/home/calum/Desktop/list3.csv", "rb"))
> 
> from itertools import *
> from jinja2 import Template
> 
> from sqlalchemy import *
> from sqlalchemy.ext.declarative import declarative_base
> from sqlalchemy.orm import sessionmaker, relationship, mapper, backref
> from sqlalchemy import and_, not_
> 
> engine = create_engine('sqlite:///vacant.db', echo=False)
> Base = declarative_base(bind=engine)
> Session = (sessionmaker(engine))
> 
> charges = {} # charges
> churches = {} # churches
> people = {} # people
> roles = {} # roles
> seats = {} # categories
> 
> class Person(Base):
>     __tablename__ = 'people'
>     id = Column(Integer, primary_key=True)
>     title = Column(String)
>     forenames = Column(String)
>     surname = Column(String)
>     degrees = Column(String)
>     seat = Column (String)
>     discriminator = Column ('type', String)
>     __mapper_args__ = {'polymorphic_on': discriminator}
> 
>     role_id = Column(Integer, ForeignKey('roles.id'))
>     role = relationship ("Role", backref = backref('people'))
> 
>     church_id = Column(Integer, ForeignKey('churches.id'))
>     church = relationship ("Church", backref = backref('people'))
> 
>     seat_id = Column(Integer, ForeignKey('seats.id'))
>     seat = relationship ("Seat", backref = backref('people'))
> 
> 
> class Minister(Person):
>     __mapper_args__ = {'polymorphic_identity': 'minister'}
> 
> class Seat(Base):
>     __tablename__ = 'seats'
>     id = Column(Integer, primary_key=True)
>     name = Column(String)
> 
> class Role(Base):
>     __tablename__ = 'roles'
>     id = Column(Integer, primary_key=True)
>     name = Column(String)
> 
> class Charge(Base):
>     __tablename__ = 'charges'
>     id = Column(Integer, primary_key=True)
>     name = Column(String)
> 
> class Church(Base):
>     __tablename__ = 'churches'
>     id = Column(Integer, primary_key=True)
>     name = Column(String)
>     charge_id = Column(Integer, ForeignKey('charges.id'))
>     charge = relationship ("Charge", backref = backref('churches'))
> 
> Base.metadata.create_all()
> session = Session()
> 
> for row in reader:
>     title =''
>     # isolate surname
>     surname = row[0].strip()
> 
>     # isolate forenames
>     forenames = row[1].strip()
> 
>     # isolate church
>     church = row[3].strip()
>     if church not in churches:
>         churches[church] = Church(name=church)
> 
>     # isolate charge
>     charge = row[2].strip()
>     if charge not in charges:
>         charges[charge] = Charge(name = charge)
> 
>     # isolate role
>     core = row[4].strip()
>     discriminator = core
>     seat = core
>     if seat not in seats:
>         seats[seat] = Seat(name = seat)
> 
>     role = row[4].strip()
>     if role not in roles:
>         roles[role] = Role(name = role)
> 
>     # isolate person
>     person = row[5]
>     if len(person.split('  '))>1:
>         (fullname, degrees) = person.split('  ')
>         deg = degrees.split(' ')
>         degrees = ', '.join(deg)
>     else:
>         degrees = ''
>         fullname = person
> 
>     ainm = fullname.split(' ')
> 
>     t = ainm[0]
>     title = ''.join(t)
>     ainm.remove(t)
> 
>     if ainm:
>         t = ainm[0]
>     if t == "Dr" or t == "Revd":
>         title = title +' '+ t
>         ainm.remove(t)
> 
>     if ainm:
>         t = ainm[0]
>         if t == "Dr":
>             title = title +' '+ t
> 
>     name = title +' '+ forenames +' '+ surname +' '+ degrees
> 
>     people[name] = Person(title=title, forenames=forenames,
> surname=surname, degrees=degrees, discriminator=discriminator)
>     people[name].church = churches[church]
>     people[name].role = roles[role]
>     people[name].seat = seats[seat]
>     people[name].discriminator = discriminator
>     churches[church].charge = charges[charge]
> 
> 
> session.add_all(churches.values())
> session.add_all(charges.values())
> session.add_all(roles.values())
> session.add_all(seats.values())
> session.add_all(people.values())
> 
> session.commit()
> 
> print "Database created and populated!<br />"
> #[Sunday 27 November 2011] [16:12:33] <virhilo>    pangur:
> DBSession.query(Churh).filter(sqlalchemy.not_(Church.id.in_(DBSssion.query(Minister.church_id).subquery()))
> 
> for c in session.query(Church).outerjoin(Person):
>     print "<b>",c.name, "</b><br />"
>     for p in c.people:
>         print p.surname, "<br />"
> 
> ######################
> '''
> This produces the traceback:
> 
> Database created and populated!
>  Minister without charge
>  --> -->
> Traceback (most recent call last):
>   File "/cserver/cgi/vacant.py", line 160, in <module>
>     for p in c.people:
>   File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.7.2-
> py2.7.egg/sqlalchemy/orm/attributes.py", line 168, in __get__
>     return self.impl.get(instance_state(instance),dict_)
>   File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.7.2-
> py2.7.egg/sqlalchemy/orm/attributes.py", line 420, in get
>     value = self.callable_(state, passive)
>   File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.7.2-
> py2.7.egg/sqlalchemy/orm/strategies.py", line 563, in _load_for_state
>     result = q.all()
>   File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.7.2-
> py2.7.egg/sqlalchemy/orm/query.py", line 1729, in all
>     return list(self)
>   File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.7.2-
> py2.7.egg/sqlalchemy/orm/query.py", line 1960, in instances
>     rows = [process[0](row, None) for row in fetch]
>   File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.7.2-
> py2.7.egg/sqlalchemy/orm/mapper.py", line 2494, in _instance
>     _instance = polymorphic_instances[discriminator]
>   File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.7.2-
> py2.7.egg/sqlalchemy/util/_collections.py", line 569, in __missing__
>     self[key] = val = self.creator(key)
>   File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.7.2-
> py2.7.egg/sqlalchemy/orm/mapper.py", line 2681, in
> configure_subclass_mapper
>     discriminator)
> AssertionError: No such polymorphic_identity u'Minister' is defined
> '''
> 

-- 
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.

Reply via email to