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