> -----Original Message----- > From: sqlalchemy@googlegroups.com > [mailto:sqlalch...@googlegroups.com] On Behalf Of werner > Sent: 04 February 2010 09:41 > To: sqlalchemy@googlegroups.com > Subject: Re: [sqlalchemy] Using a arbitrary select > mapper/class in a relation - is this allowed? > > On 03/02/2010 20:25, Michael Bayer wrote: > > werner wrote: > > > >> 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": > >> > > if you use "'Country'" as a string in relation(), the > declarative base > > looks for it inside of Base._decl_class_registry. Its not > here since > > Country isn't part of Base. You should be saying > "Country", i.e. send > > the actual class, to the relation(). > > > Thanks, just tried this but I get the same exception.
Just to confirm, were you actually defining your Region_D class exactly 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=countries_d_id == Country.id) Ie. Neither the class nor the primaryjoin parameters in the relation were strings? I would be surprised if you got the exception you described (expression 'Country' failed to locate a name ) if you had done that, because SA wouldn't be trying to look up that name. Simon -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalch...@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.