Thanks very much for the quick reply.  The second suggested worked
nicely.  I guess this explains why I was having such a hard time
tracking down a similar situation online!

Maybe I can sneak a second question in here which is to ask why the
many - many connection table can not be created using the declarative
method?  Would it be normal to create the mapping for that table after
it has been created in order to get a relational object?

Thanks again,
nigel


On Aug 25, 4:20 pm, Michael Bayer <mike...@zzzcomputing.com> wrote:
> On Aug 25, 2010, at 4:57 PM, Nigel wrote:
>
>
>
> > Hi all,
>
> > I'm having some trouble with using a schema with a many-to-many
> > declarative mapping.  The error i'm getting is as follows:
>
> > "
> > sqlalchemy.exc.InvalidRequestError: One or more mappers failed to
> > compile. Exception was probably suppressed within a hasattr() call.
> > Message was: One or more mappers failed to compile. Exception was
> > probably suppressed within a hasattr() call. Message was: When
> > compiling mapper Mapper|Entity|entity, expression 'Entity.id ==
> > entityConnections.c.masterId' failed to locate a name ("name
> > 'entityConnections' is not defined"). If this is a class name,
> > consider adding this relationship() to the <class '__main__.Entity'>
> > class after both dependent classes have been defined.
> > "
>
> > Here is a bit of code that will fail. Please excuse the word wrapping:
>
> > "
> > Base = declarative_base( bind = engine )
>
> > entityConnection = Table( 'entityConnections', Base.metadata,
> > Column( 'masterId', Integer,
> > ForeignKey( 'relationalSchema.entity.id' ), primary_key = True ),
> > Column( 'slaveId', Integer,
> > ForeignKey( 'relationalSchema.entity.id' ), primary_key = True ),
> > schema = 'relationalSchema' )
>
> > class Entity( Base ):
> >    __tablename__ = 'entity'
> >    __table_args__ = { 'schema':'relationalSchema' }
>
> >    id = Column( Integer, primary_key = True )
> >    entityType = Column(String)
>
> >    connections = relationship( 'Entity', secondary = entityConnection,
> > primaryjoin = "Entity.id == entityConnections.c.masterId",
> > secondaryjoin = "Entity.id == entityConnections.c.slaveId",backref =
> > 'entity' )
>
> >    def __init__(self, entityType ):
> >            self.entityType = entityType
>
> >    def __repr__(self):
> >            return "<Entity('%s')>" % ( self.entityType )
>
> > from sqlalchemy.orm import sessionmaker
> > Session = sessionmaker(bind=engine)
> > session = Session()
> > session.add( Entity( 'test' ) )
> > "
>
> > If I remove the references to the schema the code runs fine.  Adding
> > the schema to the primaryjoin and secondaryjoin just changes the error
> > so it must be something else.  Any ideas what I'm doing wrong here?
> > I'm a rank newbie with sqlalchemy so it's probably a pretty easy thing
> > to fix!
>
> er OK you're actually doing something that has not been anticipated, and it 
> is the "relationalSchema" bit.    So this is a bug/feature type thing in 
> SQLAlchemy (would have to figure out how we'd like this to work - I've added 
> ticket #1893 which would have it work as 
> "relationalSchema_entityConnections").
>
> The two workarounds at the moment are:
>
>         Base.metadata.tables['entityConnections'] = entityConnection
>
> or, this is certainly easier in this case, just lose the quotes:
>
>     connections = relationship( 'Entity', secondary = entityConnection,
> primaryjoin = id == entityConnection.c.masterId,
> secondaryjoin = id == entityConnection.c.slaveId,backref =
> 'entity' )
>
>
>
> > --
> > 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 
> > athttp://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