Michael, Thanks for the reply. Sorry, I am incredibly stupid for having forgotten to replace 'object' with Base.
Anyway, after I have inherited Country from Base it looks like SQLAlchemy cannot detect the relation: URL: http://localhost:5010/pages/subscribe/ File '/Users/amaslov/Projects/dou-pylons/py/lib/python2.5/site-packages/WebError-0.10.1-py2.5.egg/weberror/evalexception.py', line 431 in respond app_iter = self.application(environ, detect_start_response) File '/Users/amaslov/Projects/dou-pylons/py/lib/python2.5/site-packages/Paste-1.7.2-py2.5.egg/paste/httpexceptions.py', line 636 in __call__ return self.application(environ, start_response) File '/Users/amaslov/Projects/dou-pylons/doupy/firepython/middleware.py', line 288 in __call__ app_iter = self._app(environ, faked_start_response) File '/Users/amaslov/Projects/dou-pylons/doupy/doupy/config/middleware.py', line 72 in __call__ return self.app(environ, start_response) File '/Users/amaslov/Projects/dou-pylons/doupy/doupy/config/middleware.py', line 113 in __call__ resp = self.app(environ, start_response) File '/Users/amaslov/Projects/dou-pylons/py/lib/python2.5/site-packages/Beaker-1.2.2-py2.5.egg/beaker/middleware.py', line 81 in __call__ return self.app(environ, start_response) File '/Users/amaslov/Projects/dou-pylons/py/lib/python2.5/site-packages/Beaker-1.2.2-py2.5.egg/beaker/middleware.py', line 160 in __call__ return self.wrap_app(environ, session_start_response) File '/Users/amaslov/Projects/dou-pylons/py/lib/python2.5/site-packages/Routes-1.10.3-py2.5.egg/routes/middleware.py', line 130 in __call__ response = self.app(environ, start_response) File '/Users/amaslov/Projects/dou-pylons/py/lib/python2.5/site-packages/Paste-1.7.2-py2.5.egg/paste/registry.py', line 350 in __call__ app_iter = self.application(environ, start_response) File '/Users/amaslov/Projects/dou-pylons/py/lib/python2.5/site-packages/Pylons-0.9.7-py2.5.egg/pylons/wsgiapp.py', line 125 in __call__ response = self.dispatch(controller, environ, start_response) File '/Users/amaslov/Projects/dou-pylons/py/lib/python2.5/site-packages/Pylons-0.9.7-py2.5.egg/pylons/wsgiapp.py', line 324 in dispatch return controller(environ, start_response) File '/Users/amaslov/Projects/dou-pylons/doupy/doupy/lib/base.py', line 258 in __call__ self.request_setup() File '/Users/amaslov/Projects/dou-pylons/doupy/doupy/lib/base.py', line 298 in request_setup c.wpuser = setup_request_user(request, get_database) File '/Users/amaslov/Projects/dou-pylons/doupy/doupy/lib/auth.py', line 48 in setup_request_user g.read_wordpress_options(db) File '/Users/amaslov/Projects/dou-pylons/doupy/doupy/lib/app_globals.py', line 98 in read_wordpress_options self.siteurl = db.get_wp_option('siteurl') File '/Users/amaslov/Projects/dou-pylons/doupy/doupy/model/db.py', line 150 in get_wp_option return get_option() File '/Users/amaslov/Projects/dou-pylons/doupy/doupy/model/db.py', line 148 in get_option option = self.query_options.filter_by(option_name=name).one() File '/Users/amaslov/Projects/dou-pylons/doupy/doupy/model/db.py', line 74 in <lambda> return property(fget=lambda self: self.session.query(cls)) File '/Users/amaslov/Projects/dou-pylons/py/lib/python2.5/site-packages/SQLAlchemy-0.5.2-py2.5.egg/sqlalchemy/orm/session.py', line 898 in query return self._query_cls(entities, self, **kwargs) File '/Users/amaslov/Projects/dou-pylons/py/lib/python2.5/site-packages/SQLAlchemy-0.5.2-py2.5.egg/sqlalchemy/orm/query.py', line 91 in __init__ self._set_entities(entities) File '/Users/amaslov/Projects/dou-pylons/py/lib/python2.5/site-packages/SQLAlchemy-0.5.2-py2.5.egg/sqlalchemy/orm/query.py', line 100 in _set_entities self.__setup_aliasizers(self._entities) File '/Users/amaslov/Projects/dou-pylons/py/lib/python2.5/site-packages/SQLAlchemy-0.5.2-py2.5.egg/sqlalchemy/orm/query.py', line 114 in __setup_aliasizers mapper, selectable, is_aliased_class = _entity_info(entity) File '/Users/amaslov/Projects/dou-pylons/py/lib/python2.5/site-packages/SQLAlchemy-0.5.2-py2.5.egg/sqlalchemy/orm/util.py', line 485 in _entity_info mapper = class_mapper(entity, compile) File '/Users/amaslov/Projects/dou-pylons/py/lib/python2.5/site-packages/SQLAlchemy-0.5.2-py2.5.egg/sqlalchemy/orm/util.py', line 560 in class_mapper mapper = mapper.compile() File '/Users/amaslov/Projects/dou-pylons/py/lib/python2.5/site-packages/SQLAlchemy-0.5.2-py2.5.egg/sqlalchemy/orm/mapper.py', line 662 in compile mapper._post_configure_properties() File '/Users/amaslov/Projects/dou-pylons/py/lib/python2.5/site-packages/SQLAlchemy-0.5.2-py2.5.egg/sqlalchemy/orm/mapper.py', line 691 in _post_configure_properties prop.init() File '/Users/amaslov/Projects/dou-pylons/py/lib/python2.5/site-packages/SQLAlchemy-0.5.2-py2.5.egg/sqlalchemy/orm/interfaces.py', line 408 in init self.do_init() File '/Users/amaslov/Projects/dou-pylons/py/lib/python2.5/site-packages/SQLAlchemy-0.5.2-py2.5.egg/sqlalchemy/orm/properties.py', line 709 in do_init self._determine_joins() File '/Users/amaslov/Projects/dou-pylons/py/lib/python2.5/site-packages/SQLAlchemy-0.5.2-py2.5.egg/sqlalchemy/orm/properties.py', line 799 in _determine_joins "many-to-many relation, 'secondaryjoin' is needed as well." % (self)) ArgumentError: Could not determine join condition between parent/child tables on relation UserProfile.country. Specify a 'primaryjoin' expression. If this is a many-to-many relation, 'secondaryjoin' is needed as well. The UserProfile class is mapped as: mapper(UserProfile, user_profiles_tbl, properties={ 'country' : relation(Country), 'city' : relation(City), 'skills' : relation(Skill, secondary=user_profile_skills_tbl, order_by=Skill.name), }) The Country class is: Base = declarative_base() class Country(Base): __tablename__ = 'countries' id = Column(Integer, primary_key=True) name = Column(Unicode) alpha2 = Column(Unicode) order_col = Column(Integer) ... Thanks a lot! Regards, Alexey Maslov On Tue, Mar 31, 2009 at 5:24 PM, Michael Bayer <mike...@zzzcomputing.com>wrote: > > a class that doesn't extend your declarative base would have to be > mapped explicitly using the mapper() function, otherwise it can't be > referenced within a relation(). > > > On Mar 31, 2009, at 8:04 AM, Alex Maslov wrote: > > > > > Hello, > > > > We have been trying to mix a class inherited from declarative_base() > > ("Country") with plain Python classes mapped using orm.mapper. We're > > getting the error: > > > > UnmappedClassError: Class 'doupy.model.objects.Country' is not mapped > > > > code: > > > > Base = declarative_base() > > class Country(object): > > __tablename__ = 'countries' > > ... > > > > Base.metadata.bind = engine > > > > We also tried to create Base using > > Base = declarative_base(bind=engine) > > and > > Base = declarative_base(metadata=meta) > > > > with the same error. > > > > Full traceback below: > > File '/Users/amaslov/Projects/dou-pylons/doupy/doupy/model/ > > __init__.py', line 73 in <lambda> > > return property(fget=lambda self: self.session.query(cls)) > > File '/Users/amaslov/Projects/dou-pylons/py/lib/python2.5/site- > > packages/SQLAlchemy-0.5.2-py2.5.egg/sqlalchemy/orm/session.py', line > > 898 in query > > return self._query_cls(entities, self, **kwargs) > > File '/Users/amaslov/Projects/dou-pylons/py/lib/python2.5/site- > > packages/SQLAlchemy-0.5.2-py2.5.egg/sqlalchemy/orm/query.py', line 91 > > in __init__ > > self._set_entities(entities) > > File '/Users/amaslov/Projects/dou-pylons/py/lib/python2.5/site- > > packages/SQLAlchemy-0.5.2-py2.5.egg/sqlalchemy/orm/query.py', line 100 > > in _set_entities > > self.__setup_aliasizers(self._entities) > > File '/Users/amaslov/Projects/dou-pylons/py/lib/python2.5/site- > > packages/SQLAlchemy-0.5.2-py2.5.egg/sqlalchemy/orm/query.py', line 114 > > in __setup_aliasizers > > mapper, selectable, is_aliased_class = _entity_info(entity) > > File '/Users/amaslov/Projects/dou-pylons/py/lib/python2.5/site- > > packages/SQLAlchemy-0.5.2-py2.5.egg/sqlalchemy/orm/util.py', line 485 > > in _entity_info > > mapper = class_mapper(entity, compile) > > File '/Users/amaslov/Projects/dou-pylons/py/lib/python2.5/site- > > packages/SQLAlchemy-0.5.2-py2.5.egg/sqlalchemy/orm/util.py', line 560 > > in class_mapper > > mapper = mapper.compile() > > File '/Users/amaslov/Projects/dou-pylons/py/lib/python2.5/site- > > packages/SQLAlchemy-0.5.2-py2.5.egg/sqlalchemy/orm/mapper.py', line > > 662 in compile > > mapper._post_configure_properties() > > File '/Users/amaslov/Projects/dou-pylons/py/lib/python2.5/site- > > packages/SQLAlchemy-0.5.2-py2.5.egg/sqlalchemy/orm/mapper.py', line > > 691 in _post_configure_properties > > prop.init() > > File '/Users/amaslov/Projects/dou-pylons/py/lib/python2.5/site- > > packages/SQLAlchemy-0.5.2-py2.5.egg/sqlalchemy/orm/interfaces.py', > > line 408 in init > > self.do_init() > > File '/Users/amaslov/Projects/dou-pylons/py/lib/python2.5/site- > > packages/SQLAlchemy-0.5.2-py2.5.egg/sqlalchemy/orm/properties.py', > > line 707 in do_init > > self._get_target() > > File '/Users/amaslov/Projects/dou-pylons/py/lib/python2.5/site- > > packages/SQLAlchemy-0.5.2-py2.5.egg/sqlalchemy/orm/properties.py', > > line 719 in _get_target > > self.mapper = mapper.class_mapper(self.argument, compile=False) > > File '/Users/amaslov/Projects/dou-pylons/py/lib/python2.5/site- > > packages/SQLAlchemy-0.5.2-py2.5.egg/sqlalchemy/orm/util.py', line 557 > > in class_mapper > > raise exc.UnmappedClassError(class_) > > UnmappedClassError: Class 'doupy.model.objects.Country' is not mapped > > > > Any help is very much appreciated! > > > > Regards, > > Alex > > > > > > > > > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---