Made two changes: applicant_table = Table('applicant', metadata, Column('id',Integer, primary_key=True), # not in model Column('state', Integer, ForeignKey('applicantstate.id')), )
and mapper(Applicant.Applicant, applicant_table, properties={ '_state':relation(Applicant.State, backref=backref('applicant', uselist=False)) }) and it does what I wished for. Being new I have to learn the basics: state is a foreign key in the database which the orm writes and _state is an attribute in the object which the orm 'assigns' on retrieval. Thank you Ernst On Sep 11, 12:39 am, Michael Bayer <mike...@zzzcomputing.com> wrote: > On Sep 10, 2010, at 3:14 AM, Ernst wrote: > > > > > Hi, > > I have manged to set up joined and single table inheritance mappings. > > When relationships get involved I need help. > > > I would like to use the state pattern. Class Applicant delegates to a > > subclass of State. > > > applicant_table = Table('applicant', metadata, > > Column('applicant_id',Integer, primary_key=True), > > Column('_state', Integer, ForeignKey('applicantstate.state_id')), > > ) > > > appstate_table = Table('applicantstate', metadata, > > Column('state_id',Integer, primary_key=True), > > Column('type', String(30),nullable=False), > > Column('_givenName', String(40)) > > ) > > > # applicant - state relationship, one to one, SQLAlchemy-0.5.8- > > #mapper(Applicant, applicant_table, properties={ > > # 'applicantstate':relation(State, uselist=False, > > backref='applicant') > > #}) > > > mapper(Applicant, applicant_table, properties={ > > 'applicantstate':relation(State, backref=backref('applicant', > > uselist=False)) > > }) > > > I tried both relationships and get: > > ProgrammingError: (ProgrammingError) can't adapt ' > > INSERT INTO applicant (applicant_id, _state) > > VALUES (%(applicant_id)s, %(_state)s)' > > {'_state': <tg21tut.model.Applicant2.NewStdApp object at 0x9034bec>, > > 'applicant_id': 1L} > > > I have omitted the single table inheritance mappings. > > The relationship is valid. The error there arises from some inappropriate > manipulation of objects, such as setting applicant._state = > SomeApplicantState(), instead of assigning to the "applicantstate" attribute. > Full detail would be needed in order to determine the issue. -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalch...@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.