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.

Reply via email to