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.




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

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