minimal mapping + the query against that mapping.

On 6/26/14, 4:11 PM, Ken Lareau wrote:
> On Thu, Jun 26, 2014 at 5:57 AM, Mike Bayer <mike...@zzzcomputing.com
> <mailto:mike...@zzzcomputing.com>> wrote:
>
>
>     On 6/25/14, 8:06 PM, Ken Lareau wrote:
>>     On Wed, Jun 25, 2014 at 6:28 AM, Mike Bayer
>>     <mike...@zzzcomputing.com <mailto:mike...@zzzcomputing.com>> wrote:
>>
>>
>>         On 6/25/14, 2:26 AM, Ken Lareau wrote:
>>>         On Tue, Jun 24, 2014 at 3:35 PM, Mike Bayer
>>>         <mike...@zzzcomputing.com <mailto:mike...@zzzcomputing.com>>
>>>         wrote:
>>>
>>>
>>>             On 6/23/14, 8:09 PM, Ken Lareau wrote:
>>>             >
>>>             >     if apptier:
>>>             >         subq = (
>>>             >             Session.query(
>>>             >                 Package.pkg_name,
>>>             >                 Package.version,
>>>             >                 Package.revision,
>>>             >                 AppDefinition.app_type,
>>>             >                 AppDeployment.environment
>>>             >             ).join(Deployment)
>>>             >              .join(AppDeployment)
>>>             >              .join(AppDefinition)
>>>             >              .filter(Package.pkg_name == package_name)
>>>             >              .filter(AppDeployment.environment == env)
>>>             >              .filter(AppDeployment.status !=
>>>             'invalidated'))
>>>             >
>>>             >         [...]
>>>             >
>>>             >         # The actual column name must be used in the
>>>             subquery
>>>             >         # usage below; DB itself should be corrected
>>>             >         versions = (Session.query(subq.c.appType,
>>>             >                     subq.c.version,
>>>             >                     subq.c.revision)
>>>             >                     .group_by(subq.c.appType,
>>>             subq.c.environment)
>>>             >                     .all())
>>>             >
>>>             > The parts in the subquery work fine, but the access of
>>>             the 'column'
>>>             > in the final query leads to this:
>>>             >
>>>             > Traceback (most recent call last):
>>>             >   File "<stdin>", line 1, in <module>
>>>             >   File
>>>             "/home/klareau/repos/git/tagopsdb/tagopsdb/deploy/deploy.py",
>>>             > line 234, in find_deployed_version
>>>             >     .group_by(subq.c.appType, subq.c.environment)
>>>             >   File
>>>             >
>>>             
>>> "/home/klareau/.virtualenvs/tds/lib/python2.6/site-packages/sqlalchemy/util/_collections.py",
>>>             > line 174, in __getattr__
>>>             >     raise AttributeError(key)
>>>             > AttributeError: environment
>>>             >
>>>             > This is not completely surprising, but I'm uncertain
>>>             as the best way
>>>             > to fix this... help? :)
>>>             nothing is obviously wrong, assuming you are calling
>>>             "subquery()" on
>>>             subq at the end.  It will be a select() construct which
>>>             will have a
>>>             column called ".environment" on the .c. collection because
>>>             AppDeployment.environment is present.   Can't say why
>>>             this attribute is
>>>             not here without full details.
>>>
>>>
>>>         Oops there were some additional filters I left out, but this
>>>         is added
>>>         before the final query:
>>>
>>>         subq = (subq.order_by(AppDeployment.realized.desc())
>>>                             .subquery(name='t_ordered'))
>>>
>>>         Not sure why it isn't working, but today my coworker an I
>>>         massively
>>>         rewrote one of the other methods to avoid this same issue,
>>>         so maybe
>>>         we should try the same for this one... though it would be
>>>         nice to know
>>>         what I goofed here, but not sure what additional information
>>>         I can
>>>         give that would help offhand...
>>
>>         what are the names that are actually present on subq.c ?  
>>         "print list(subq.c)" should give an indication.
>>
>>
>>     Adding that in to the method gave this:
>>
>>     >>> deploy.find_deployed_version('tdstest', 'development',
>>     version='9', apptier=True)
>>     [Column('pkg_name', String(length=255), table=<t_ordered>,
>>     nullable=False), Column('version', String(length=63),
>>     table=<t_ordered>, nullable=False), Column('revision',
>>     String(length=63), table=<t_ordered>, nullable=False),
>>     Column('appType', String(length=100), table=<t_ordered>,
>>     nullable=False), <sqlalchemy.sql.elements.ColumnClause at
>>     0x1d20e10; %(30521360 anon)s>]
>>     Traceback (most recent call last):
>>       File "<stdin>", line 1, in <module>
>>       File
>>     "/home/klareau/repos/git/tagopsdb/tagopsdb/deploy/deploy.py",
>>     line 237, in find_deployed_version
>>         .group_by(subq.c.appType, subq.c.environment)
>>       File
>>     
>> "/home/klareau/.virtualenvs/tds/lib/python2.6/site-packages/sqlalchemy/util/_collections.py",
>>     line 174, in __getattr__
>>         raise AttributeError(key)
>>     AttributeError: environment
>     you need to put .label('environment') on that column before it
>     finds its way into subq.  I dont have the mappings here to review.   
>
>     for the next go around please just provide a one-file example of
>     the mapping plus the query, thanks.
>
> Do you desire the example to be fully functional, or just have the
> relevant
> mapping and query?  We ran into the same issue with another query and
> ended up completely reworking the code to avoid the subquery, but it in-
> volves quite a bit of various mappings and I'm uncertain if it's the
> proper
> way to move forward.  I could try to post the before/after here, but if it
> needs to be able to to run standalone it may take me a bit of time to get
> it into a fully workable state (given how extensive it is).
>
>
> -- 
> - Ken Lareau
>
> -- 
> You received this message because you are subscribed to the Google
> Groups "sqlalchemy" group.
> To unsubscribe from this group and stop receiving emails from it, send
> an email to sqlalchemy+unsubscr...@googlegroups.com
> <mailto:sqlalchemy+unsubscr...@googlegroups.com>.
> To post to this group, send email to sqlalchemy@googlegroups.com
> <mailto:sqlalchemy@googlegroups.com>.
> Visit this group at http://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to