In my model I have:

class Country(BaseExt):
    pass

sao.mapper(Country, createSelect(Country_D, Country_T, 'countries_d_id', ['name', 'url']))

Which I can use like this:

for cs in session.query(db.Country).all():
    print cs.name, cs.id

But I run into problems when I try to use "Country" in a relation like this:

class Region_D(Base, CreateUpdateMixin):
    __tablename__ = u'regions_d'

id = sa.Column(sa.Integer(), sa.Sequence('regions_d_id'), primary_key=True, nullable=False)
    name = sa.Column(sa.String(length=50, convert_unicode=False))

    countries_d_id = sa.Column(sa.Integer())

country = sao.relation('Country', backref='region_d', primaryjoin='Region_D.countries_d_id == Country.id')

I am getting this exception also "Country" is defined before "Region_D":

Traceback (most recent call last):
  File "saTest.py", line 41, in <module>
    for cs in session.query(db.Country).all():
File "c:\python25\lib\site-packages\sqlalchemy-0.5.8-py2.5.egg\sqlalchemy\orm\session.py", line 893, in query
    return self._query_cls(entities, self, **kwargs)
File "c:\python25\lib\site-packages\sqlalchemy-0.5.8-py2.5.egg\sqlalchemy\orm\query.py", line 92, in __init__
    self._set_entities(entities)
File "c:\python25\lib\site-packages\sqlalchemy-0.5.8-py2.5.egg\sqlalchemy\orm\query.py", line 101, in _set_entities
    self._setup_aliasizers(self._entities)
File "c:\python25\lib\site-packages\sqlalchemy-0.5.8-py2.5.egg\sqlalchemy\orm\query.py", line 115, in _setup_aliasizers
    mapper, selectable, is_aliased_class = _entity_info(entity)
File "c:\python25\lib\site-packages\sqlalchemy-0.5.8-py2.5.egg\sqlalchemy\orm\util.py", line 492, in _entity_info
    mapper = class_mapper(entity, compile)
File "c:\python25\lib\site-packages\sqlalchemy-0.5.8-py2.5.egg\sqlalchemy\orm\util.py", line 567, in class_mapper
    mapper = mapper.compile()
File "c:\python25\lib\site-packages\sqlalchemy-0.5.8-py2.5.egg\sqlalchemy\orm\mapper.py", line 687, in compile
    mapper._post_configure_properties()
File "c:\python25\lib\site-packages\sqlalchemy-0.5.8-py2.5.egg\sqlalchemy\orm\mapper.py", line 716, in _post_configure_properties
    prop.init()
File "c:\python25\lib\site-packages\sqlalchemy-0.5.8-py2.5.egg\sqlalchemy\orm\interfaces.py", line 408, in init
    self.do_init()
File "c:\python25\lib\site-packages\sqlalchemy-0.5.8-py2.5.egg\sqlalchemy\orm\properties.py", line 714, in do_init
    self._get_target()
File "c:\python25\lib\site-packages\sqlalchemy-0.5.8-py2.5.egg\sqlalchemy\orm\properties.py", line 731, in _get_target
    self.mapper = mapper.class_mapper(self.argument(), compile=False)
File "c:\python25\lib\site-packages\sqlalchemy-0.5.8-py2.5.egg\sqlalchemy\ext\declarative.py", line 624, in return_cls
    prop.parent, arg, n.args[0], cls))
sqlalchemy.exc.InvalidRequestError: When compiling mapper Mapper|Region_D|regions_d, expression 'Country' failed to locate a name ("name 'Country' is not defined"). If this is a class name, consider adding this relation() to the <class 'model.Region_D'> class after both dependent classes have been defined.

Am I doing something wrong or is it not possible to use a class/mapper based on a select in a relation?

Werner

--
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to