On Wed, Oct 26, 2011 at 2:22 AM, Stefano Fontanelli <s.fontane...@asidev.com > wrote:
> > Hi James, > you cannot define two mapper properties that use the same name. > Thank you. I truly appreciate your response. I can now implement the table interconnection while both classes are defined in the same file. My problem is when the classes are separated. Given the following two files: ========8<---------------------- #!/usr/bin/env python """ user.py """ from sqlalchemy import create_engine, Column, ForeignKey, Integer, String from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker, relationship, backref Base = declarative_base() class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String) fullname = Column(String) password = Column(String) def __init__(self, name, fullname, password): self.name = name self.fullname = fullname self.password = password def __repr__(self): return "<User('%s', '%s', '%s', '%s')>" % (self.id, self.name, self.fullname, self.password) if __name__ == '__main__': engine = create_engine('sqlite:///db', echo=True) #Base.metadata.create_all(engine) Session = sessionmaker(bind=engine) session = Session() for user in session.query(User).all(): print user ========8<---------------------- #!/usr/bin/env python """ address.py """ from sqlalchemy import create_engine, Column, ForeignKey, Integer, String from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker, relationship, backref from user import User Base = declarative_base() class Address(Base): __tablename__ = 'addresses' id = Column(Integer, primary_key=True) email_address = Column(String, nullable=False) user_id = Column(Integer, ForeignKey('users.id'), nullable=False) user = relationship('User', backref=backref('addresses', order_by=id)) def __init__(self, email): self.email_address = email def __repr__(self): return "<Address('%s', '%s', '%s')>" % (self.id, self.email_address, self.user_id) if __name__ == '__main__': engine = create_engine('sqlite:///db', echo=True) Session = sessionmaker(bind=engine) session = Session() for addr in session.query(Address).all(): print addr ========8<---------------------- I get the following error when executing address.py: ========8<---------------------- Traceback (most recent call last): File "./address.py", line 35, in <module> for addr in session.query(Address).all(): File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 897, in query return self._query_cls(entities, self, **kwargs) File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 105, in __init__ self._set_entities(entities) File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 114, in _set_entities self._setup_aliasizers(self._entities) File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 129, in _setup_aliasizers _entity_info(entity) File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/util.py", line 476, in _entity_info mapperlib.configure_mappers() File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/mapper.py", line 2719, in configure_mappers mapper._post_configure_properties() File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/mapper.py", line 1035, in _post_configure_properties prop.init() File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/interfaces.py", line 121, in init self.do_init() File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/properties.py", line 899, in do_init self._process_dependent_arguments() File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/properties.py", line 987, in _process_dependent_arguments self.target = self.mapper.mapped_table File "/usr/local/lib/python2.7/site-packages/sqlalchemy/util/langhelpers.py", line 432, in __get__ obj.__dict__[self.__name__] = result = self.fget(obj) File "/usr/local/lib/python2.7/site-packages/sqlalchemy/orm/properties.py", line 880, in mapper mapper_ = mapper.class_mapper(self.argument(), File "/usr/local/lib/python2.7/site-packages/sqlalchemy/ext/declarative.py", line 1214, in return_cls (prop.parent, arg, n.args[0], cls) sqlalchemy.exc.InvalidRequestError: When initializing mapper Mapper|Address|addresses, expression 'User' failed to locate a name ("name 'User' is not defined"). If this is a class name, consider adding this relationship() to the <class '__main__.Address'> class after both dependent classes have been defined. ========8<---------------------- Am I forced to define both classes within the same scope? Again, any candor anyone would care to share would be greatly appreciated. Thanks. -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@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.