Excerpts from Michael Bayer's message of Tue Nov 30 13:50:26 -0300 2010:
> Nothing wrong with the mapping, except the "primaryjoin" is not needed. The
> cause is certainly the usage of "useexisting", which implies that these
> tables have already been created, and everything you are specifying in the
> Table() is ignored. I wouldn't use that flag.
>
Thanks Michael as always.
Removing the useexisting=True, if I also remove the primaryjoin I get:
ArgumentError: Could not determine join condition between parent/child
tables on relationship RegEvent.who. Specify a 'primaryjoin' expression. If
'secondary' is
present, 'secondaryjoin' is needed as well.
If I leave the primaryjoin I still get the same error as reported.
TIA for any extra ideas you can suggest to fix this.
Mariano
> On Nov 30, 2010, at 10:22 AM, Mariano Mara wrote:
>
> > Hi.
> >
> > I'm trying to relate two tables with a one to many relationship (the
> > parent table has a composite primary key) but I'm getting a mapper
> > error. I found a recent message about this same problem but with
> > declarative base (which I don't use) and not sure why the suggestion
> > there didn't apply to my problem.
> >
> > Find below the error and the table creation code.
> >
> > TIA,
> > Mariano
> >
> > Error:
> >
> > ArgumentError: Could not locate any equated, locally mapped column pairs
> > for primaryjoin condition 'regevent.id =
> > regevent_who.regevent_id AND regevent.author =
> > regevent_who.regevent_author' on relationship RegEvent.who. For more
> > relaxed rules on join conditions, the relationship may be marked as
> > viewonly=True.
> >
> > Code:
> >
> > regevent = Table('regevent', metadata,
> > Column('id', Unicode(200), primary_key=True),
> > Column('author', Unicode(200), primary_key=True),
> > Column('since', DateTime),
> > Column('until', DateTime),
> > Column('title', Unicode(100)),
> > Column('content', Unicode(600)),
> > Column('status', Unicode(200)),
> > Column('published', DateTime),
> > useexisting=True)
> > Index('regevent_cal_ix', *(regevent.c.calname,))
> >
> > class RegEvent(object):
> > pass
> >
> > regevent_who = Table('regevent_who', metadata,
> > Column('id', Integer, primary_key=True,
> > autoincrement=True),
> > Column('regevent_id', Unicode(200)),
> > Column('regevent_author', Unicode(200)),
> > Column('email', Unicode(200)),
> > Column('status', Unicode(200)),
> > Column('role', Unicode(200)),
> > ForeignKeyConstraint(("regevent_id", "regevent_author"),
> > ("regevent.id", "regevent.author"),
> > "regevent_fk"),
> > useexisting=True)
> > Index("regevent_who_fk_ix", *(regevent_who.c.regevent_id,
> > regevent_who.c.regevent_author))
> >
> > class RegEventWho(object):
> > pass
> >
> >
> > mapper(RegEvent, regevent_who, properties={
> > 'who': relationship(RegEventWho,
> > primaryjoin=and_(
> > regevent.c.id==regevent_who.c.regevent_id,
> >
> > regevent.c.author==regevent_who.c.regevent_author))
> > })
> > mapper(RegEventWho, regevent_who)
> >
> >
> > --
> > 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.
> >
>
--
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.