[Sqlalchemy-tickets] Issue #3417: Unable to get column_descriptions when joining to same join targe
Brought to you by:
zzzeek
|
From: Marco M. <iss...@bi...> - 2015-05-07 22:55:34
|
New issue 3417: Unable to get column_descriptions when joining to same join target multiple times https://bitbucket.org/zzzeek/sqlalchemy/issue/3417/unable-to-get-column_descriptions-when Marco Martinez: I'm trying to get ``column_descriptions`` from a query that I'm building that contains multiple joins to the same target, but I'm getting the following error message: ``` Traceback (most recent call last): File "bug-alias.py", line 37, in test query.column_descriptions File "/home/mmartinez/env/sa/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2583, in column_descriptions for ent in self._entities File "/home/mmartinez/env/sa/lib/python2.7/site-packages/sqlalchemy/orm/util.py", line 398, in __getattr__ raise AttributeError(key) AttributeError: entity ``` Here's an example of what my code pre-1.0 was doing: ``` #!python import sqlalchemy as sa from sqlalchemy import orm from sqlalchemy.ext.declarative import declarative_base Session = orm.Session() Base = declarative_base() class User(Base): __tablename__ = 'user' id = sa.Column(sa.Integer(), primary_key=True) name = sa.Column(sa.Unicode(), nullable=False, unique=True) class MyData(Base): __tablename__ = 'mydata' id = sa.Column(sa.Integer(), primary_key=True) data = sa.Column(sa.Unicode(), nullable=False, unique=True) created_by_id = sa.Column(sa.ForeignKey(User.id)) created_by = orm.relationship(User, foreign_keys=[created_by_id]) modified_by_id = sa.Column(sa.ForeignKey(User.id)) modified_by = orm.relationship(User, foreign_keys=[modified_by_id]) Creator = orm.aliased(User) Modifier = orm.aliased(User) query = ( Session.query( MyData.data, sa.literal(u'why').label('someliteral'), # Literals will fail too Creator.name.label('created_by'), Modifier.name.label('modfied_by') ) .join(Creator, MyData.created_by) .join(Modifier, MyData.modified_by) ) print ([d['name'] for d in query.column_descriptions]) ``` Reading the 1.0 changlog, I tried this instead (which worked) : ``` #!python query = ( Session.query( MyData.data, sa.literal(u'why').label('someliteral'), ) .join(MyData.created_by, aliased=True) .add_column(User.name.label('created_by')) .reset_joinpoint() .join(MyData.modified_by, aliased=True) .add_column(User.name.label('modified_by')) .reset_joinpoint() ) print ([d['name'] for d in query.column_descriptions]) ``` Am I missing something? Thanks in advance. |