ohhh, I'm out of words other than thank you for spotting it. I can't
believe how stupid I feel right now.

Mariano

Excerpts from Michael Bayer's message of Tue Nov 30 14:27:42 -0300 2010:
> your RegEvent mapper is against the wrong table, here is the correct code:
> 
> from sqlalchemy import *
> from sqlalchemy.orm import *
> metadata = MetaData()
> 
> 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))
> 
> 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"))
> 
> class RegEventWho(object):
>    pass
> 
> 
> mapper(RegEvent, regevent, properties={
>    'who': relationship(RegEventWho)
> })
> mapper(RegEventWho, regevent_who)
> 
> print Session().query(RegEvent).join(RegEvent.who)
> 
> On Nov 30, 2010, at 12:22 PM, Mariano Mara wrote:
> 
> > 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 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.
> > 
> 

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