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

Reply via email to