Thanks, it works when I added the MetaData instance to the
declarative_meta() call.

Have a great day!

Regards,
Alexey Maslov


On Tue, Mar 31, 2009 at 6:02 PM, Michael Bayer <mike...@zzzcomputing.com>wrote:

> user_profiles_tbl and your declarative_meta need to share same MetaData
> instance.
>
> On Mar 31, 2009, at 9:56 AM, Alexey Maslov wrote:
>
> 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