Hi,

I can't find what I am doing wrong here.
The relevant parts of code:

news = Table('news', dbmeta, autoload=True)
news_query = select(columns=[news], whereclause=or_(news.c.blog ==
None, news.c.blog == False))

    mapper(News, news_query, properties={
        'roles':relation(Role, secondary=news_roles, backref='news'),
        'author':relation(User, lazy=False),
        'comments':relation(Comment),
        'approved_comments':relation(Comment,
            primaryjoin=and_(news.c.id == comments.c.news_id,
comments.c.status == 'approved'),
            foreign_keys=[comments.c.news_id],
            viewonly=True,
            remote_side=[news.c.id],
        )
    }, primary_key=[news.c.id])


When I try to access "approved_comments" property (e.g. "print len
(record.approved_comments)") it breaks:
[...]
Module layouts_default_html:337 in render_news_item          view
Module sqlalchemy.orm.dynamic:167 in __iter__          view
>>  return iter(self._clone(sess))
Module sqlalchemy.orm.query:1287 in __iter__          view
>>  return self._execute_and_instances(context)
Module sqlalchemy.orm.query:1290 in _execute_and_instances
view
>>  result = self.session.execute(querycontext.statement, params=self._params, 
>> mapper=self._mapper_zero_or_none())
Module sqlalchemy.orm.session:755 in execute          view
>>  clause, params or {})
Module sqlalchemy.engine.base:1281 in execute          view
>>  return proxy.execute(self, super(ProxyConnection, self).execute, object, 
>> *multiparams, **params)
Module sqlalchemy.interfaces:137 in execute          view
>>  return execute(clauseelement, *multiparams, **params)
Module sqlalchemy.engine.base:824 in execute          view
>>  return Connection.executors[c](self, object, multiparams, params)
Module sqlalchemy.engine.base:872 in _execute_clauseelement
view
>>  parameters=params
Module sqlalchemy.engine.base:938 in
__create_execution_context          view
>>  return dialect.execution_ctx_cls(dialect, connection=self, **kwargs)
Module sqlalchemy.engine.default:166 in __init__          view
>>  self.compiled_parameters = [compiled.construct_params(m) for m in 
>> parameters]
Module sqlalchemy.sql.compiler:225 in construct_params          view
>>  pd[self.bind_names[bindparam]] = bindparam.value()
Module sqlalchemy.orm.strategies:404 in <lambda>          view
>>  bindparam.value = lambda: mapper._get_committed_attr_by_column(o, 
>> bind_to_col[bindparam.key])
Module sqlalchemy.orm.mapper:1088 in
_get_committed_attr_by_column          view
>>  return self._get_committed_state_attr_by_column(state, column)
Module sqlalchemy.orm.mapper:1091 in
_get_committed_state_attr_by_column          view
>>  return self._get_col_to_prop(column).getcommitted(state, column, 
>> passive=passive)
Module sqlalchemy.orm.mapper:1077 in _get_col_to_prop          view
>>  raise exc.UnmappedColumnError("No column %s is configured on mapper %s..." 
>> % (column, self))
UnmappedColumnError: No column comments.news_id is configured on
mapper Mapper|News|%(25629424 anon)s...

When I add "lazy=False" to the relation definition, the error comes
from the database itself (I think):

ProgrammingError: (ProgrammingError) invalid reference to FROM-clause
entry for table "comments" LINE 7: ...JOIN comments AS comments_1 ON
anon_1.anon_2_id = comments.n... ^ HINT: Perhaps you meant to
reference the table alias "comments_1".

Thanks
Ksenia


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