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