Hello all,

I've just started using SQLAlchemy recently (and it's been great) but
I have run into a problem recently. I am trying to map a table back to
itself via a second many-to-many table in a declarative fashion. I
have this working as so (mapper configuration):

category_association = Table('BankCategoryMap',
                             Base.metadata,
                             Column("ParentCategoryID", Integer,
ForeignKey('BankCategories.ID'), primary_key=True),
                             Column("ChildCategoryID", Integer,
ForeignKey('BankCategories.ID'), primary_key=True))

category_table = Table('BankCategories',
                       Base.metadata,
                       Column("ID", Integer, primary_key=True),
                       Column("Name", String),
                       Column("Description", String),
                       Column("Active", SmallInteger))

class Category(object):
    pass

mapper(Category,
       category_table,
       properties={'parents': relationship(Category,
 
secondary=category_association,
 
primaryjoin=category_table.c.ID ==
category_association.c.ChildCategoryID,
 
secondaryjoin=category_association.c.ParentCategoryID ==
category_table.c.ID,
                                           backref='children')
                    })



However, when I try it the Declarative way:

category_association = Table('BankCategoryMap',
                             Base.metadata,
                             Column("ParentCategoryID", Integer,
ForeignKey('BankCategories.ID'), primary_key=True),
                             Column("ChildCategoryID", Integer,
ForeignKey('BankCategories.ID'), primary_key=True))

class Category(Base):
    __tablename__ = 'BankCategories'

    id = Column("ID", Integer, primary_key=True)
    name = Column("Name", String)
    description = Column("Description", String)
    active = Column("Active", SmallInteger)


    parents = relationship("Category",
                           secondary=category_association,
                           primaryjoin="BankCategories.ID" ==
category_association.c.ChildCategoryID,
 
secondaryjoin=category_association.c.ParentCategoryID ==
"BankCategories.ID",
                           backref='children')



This does not work and I get the following error:

File '/home/doug/pyenv_svn/CreateService/surveyservice/surveyservice/
controllers/error.py', line 25 in document
  cat.parents
File '/home/doug/pyenv_svn/CreateService/lib/python2.6/site-packages/
SQLAlchemy-0.6.5-py2.6.egg/sqlalchemy/orm/attributes.py', line 170 in
__get__
  instance_dict(instance))
File '/home/doug/pyenv_svn/CreateService/lib/python2.6/site-packages/
SQLAlchemy-0.6.5-py2.6.egg/sqlalchemy/orm/attributes.py', line 390 in
get
  value = callable_(passive=passive)
File '/home/doug/pyenv_svn/CreateService/lib/python2.6/site-packages/
SQLAlchemy-0.6.5-py2.6.egg/sqlalchemy/orm/strategies.py', line 670 in
__call__
  result = q.all()
File '/home/doug/pyenv_svn/CreateService/lib/python2.6/site-packages/
SQLAlchemy-0.6.5-py2.6.egg/sqlalchemy/orm/query.py', line 1576 in all
  return list(self)
File '/home/doug/pyenv_svn/CreateService/lib/python2.6/site-packages/
SQLAlchemy-0.6.5-py2.6.egg/sqlalchemy/orm/query.py', line 1688 in
__iter__
  return self._execute_and_instances(context)
File '/home/doug/pyenv_svn/CreateService/lib/python2.6/site-packages/
SQLAlchemy-0.6.5-py2.6.egg/sqlalchemy/orm/query.py', line 1693 in
_execute_and_instances
  mapper=self._mapper_zero_or_none())
File '/home/doug/pyenv_svn/CreateService/lib/python2.6/site-packages/
SQLAlchemy-0.6.5-py2.6.egg/sqlalchemy/orm/session.py', line 729 in
execute
  clause, params or {})
File '/home/doug/pyenv_svn/CreateService/lib/python2.6/site-packages/
SQLAlchemy-0.6.5-py2.6.egg/sqlalchemy/engine/base.py', line 1191 in
execute
  params)
File '/home/doug/pyenv_svn/CreateService/lib/python2.6/site-packages/
SQLAlchemy-0.6.5-py2.6.egg/sqlalchemy/engine/base.py', line 1269 in
_execute_clauseelement
  parameters=params
File '/home/doug/pyenv_svn/CreateService/lib/python2.6/site-packages/
SQLAlchemy-0.6.5-py2.6.egg/sqlalchemy/engine/base.py', line 1377 in
__create_execution_context
  connection=self, **kwargs)
File '/home/doug/pyenv_svn/CreateService/lib/python2.6/site-packages/
SQLAlchemy-0.6.5-py2.6.egg/sqlalchemy/engine/default.py', line 388 in
__init__
  grp,m in enumerate(parameters)]
File '/home/doug/pyenv_svn/CreateService/lib/python2.6/site-packages/
SQLAlchemy-0.6.5-py2.6.egg/sqlalchemy/sql/compiler.py', line 291 in
construct_params
  pd[self.bind_names[bindparam]] = bindparam.value()
File '/home/doug/pyenv_svn/CreateService/lib/python2.6/site-packages/
SQLAlchemy-0.6.5-py2.6.egg/sqlalchemy/orm/strategies.py', line 447 in
<lambda>
  state, dict_, bind_to_col[bindparam.key])
File '/home/doug/pyenv_svn/CreateService/lib/python2.6/site-packages/
SQLAlchemy-0.6.5-py2.6.egg/sqlalchemy/orm/mapper.py', line 1303 in
_get_state_attr_by_column
  return self._columntoproperty[column]._getattr(state, dict_, column,
passive=passive)
File '/home/doug/pyenv_svn/CreateService/lib/python2.6/site-packages/
SQLAlchemy-0.6.5-py2.6.egg/sqlalchemy/orm/mapper.py', line 2510 in
__missing__
  (column, self.mapper))
UnmappedColumnError: No column :ChildCategoryID_1 is configured on
mapper Mapper|Category|BankCategories...


Any idea/help on why I'm getting the UnmappedColumnError?


Thanks,
Doug

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