using explicit labels is the best approach to bypass SQLA's labeling schemes, such as this example:
from sqlalchemy import * from sqlalchemy.orm import * from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class A(Base): __tablename__ = 'a' id = Column(Integer, primary_key=True) x = Column(Integer) y = Column(Integer) e = create_engine("sqlite://", echo=True) Base.metadata.create_all(e) sess = Session(e) sess.add_all([ A(x=1, y=2), A(x=2, y=5), A(x=3, y=3), ]) sess.commit() stmt = select([A.id, A.x, A.y, (A.x + A.y).label('xplusy')]) print sess.query(A, stmt.c.xplusy).from_statement(stmt).all() On Apr 25, 2013, at 12:47 PM, Richard Gerd Kuesters <rich...@humantech.com.br> wrote: > Yeah, well, it is a select but didn't work. I also made another select on top > of it (to be sure), but the "error" persists (could not locate column ...). > > Nevermind about it, I think it's not a question of good usage of SA I think :) > > Thanks for your help! > > Cheers, > Richard. > > > On 04/25/2013 01:22 PM, Michael Bayer wrote: >> if the original "q" is a select(), this should work: >> >> query(MyClass, q.c.somecol, q.c.someothercol).from_statement(q) >> >> if not then I guess I'll screw around with it to see what works. >> >> >> >> On Apr 25, 2013, at 10:37 AM, Richard Gerd Kuesters >> <rich...@humantech.com.br> wrote: >> >>> Yup, I agree with you, but things are a little out of hand for me to use >>> ORM-level queries. I'll see what I can do ... >>> >>> Thanks! :) >>> Cheers, >>> Richard. >>> >>> On 04/25/2013 11:31 AM, Michael Bayer wrote: >>>> you'd need to organize things differently for the column grabbing to work >>>> out. >>>> >>>> I'd advise producing the query using ORM-level Query in the first place so >>>> that you don't need to use from_statement(), which is really a last resort >>>> system. >>>> >>>> >>>> On Apr 25, 2013, at 10:27 AM, Richard Gerd Kuesters >>>> <rich...@humantech.com.br> wrote: >>>> >>>>> Well, not the desired result ... Now things justs blows :-) >>>>> >>>>> sqlalchemy.exc.NoSuchColumnError: "Could not locate column in row for >>>>> column 'anon_1.level'" >>>>> >>>>> >>>>> Cheers, >>>>> Richard. >>>>> >>>>> >>>>> On 04/25/2013 11:03 AM, Michael Bayer wrote: >>>>>> why not just say session.query(MyObj, q.alias()) ? creating >>>>>> ad-hoc mappers is relatively expensive. >>>>>> >>>>>> >>>>>> >>>>>> On Apr 25, 2013, at 8:56 AM, Richard Gerd Kuesters >>>>>> <rich...@humantech.com.br> wrote: >>>>>> >>>>>>> Well, probably nevermind because I made a workaround that satisfies me >>>>>>> (may not be elegant, but that's OK). >>>>>>> >>>>>>> Basically, I created the "o" type a little different: "o = >>>>>>> type('MyObjExt', (Base,), {'__table__':q.alias('q')})" and append it to >>>>>>> the query like: "session.query(MyObj, o).from_statement(q).all()" >>>>>>> >>>>>>> Okay, now it returns a typle, but at least I don't have to make a >>>>>>> second query :) >>>>>>> >>>>>>> >>>>>>> Cheers, >>>>>>> Richard. >>>>>>> >>>>>>> On 04/25/2013 09:41 AM, Richard Gerd Kuesters wrote: >>>>>>>> Hi all, >>>>>>>> >>>>>>>> I've been playing with "sqla_hierarchy" from >>>>>>>> https://github.com/marplatense/sqla_hierarchy . >>>>>>>> >>>>>>>> The problem is: the returned query appends 3 columns: level (Integer), >>>>>>>> is_leaf (Boolean) and connect_path (pg ARRAY). >>>>>>>> >>>>>>>> So far, so good. If I execute the query using >>>>>>>> "session.execute(q).fetchall()", it works like a charm. But, as we >>>>>>>> know, "session.execute" returns a RowProxy, not objects. Using >>>>>>>> "session.query(MyObj).from_statement(q).all()", I'm able to get my >>>>>>>> mapped objects, but without the extra columns that would make me very >>>>>>>> pleased (level, is_leaf, connect_path). Is there a way to get around >>>>>>>> this? >>>>>>>> >>>>>>>> I have done testings using "o = type('MyObjExt', (MyObj,), >>>>>>>> {'__table__': q}" and them use it on the session.query, *but* it >>>>>>>> looses foreign key references - or, well, I don't know how to >>>>>>>> "explain" this to the mapper (?), since MyObj is polymorphic (probably >>>>>>>> the pitfall?). >>>>>>>> >>>>>>>> >>>>>>>> Thanks for your time and help. >>>>>>>> >>>>>>>> Best regards, >>>>>>>> Richard. >>>>>>>> -- >>>>>>>> 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?hl=en. >>>>>>>> For more options, visit https://groups.google.com/groups/opt_out. >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> 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?hl=en. >>>>>>> For more options, visit https://groups.google.com/groups/opt_out. >>>>>>> >>>>>>> >>>>>> >>>>>> -- >>>>>> 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?hl=en. >>>>>> For more options, visit https://groups.google.com/groups/opt_out. >>>>>> >>>>>> >>>>> >>>>> >>>>> -- >>>>> 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?hl=en. >>>>> For more options, visit https://groups.google.com/groups/opt_out. >>>>> >>>>> >>>> >>>> -- >>>> 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?hl=en. >>>> For more options, visit https://groups.google.com/groups/opt_out. >>>> >>>> >>> >>> >>> -- >>> 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?hl=en. >>> For more options, visit https://groups.google.com/groups/opt_out. >>> >>> >> >> -- >> 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?hl=en. >> For more options, visit https://groups.google.com/groups/opt_out. >> >> > > > -- > 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?hl=en. > For more options, visit https://groups.google.com/groups/opt_out. > > -- 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?hl=en. For more options, visit https://groups.google.com/groups/opt_out.