Sounds great; I agree avoiding the naming convention is ideal. For my
project the only reason we're using a text clause is to call a stored
procedure, which definitely can't go in a subquery, so I'm not sure how
well I can weigh in on the aliasing stuff.

-Matt


On Fri, Feb 7, 2014 at 1:43 PM, Michael Bayer <mike...@zzzcomputing.com>wrote:

>
> On Feb 7, 2014, at 1:00 PM, Matt Phipps <matt.the.m...@gmail.com> wrote:
>
>
> I wrote one more test that failed (but I'm pretty sure it doesn't matter):
> I was under the impression that passing Label objects to .columns() would
> allow you to map *arbitrary* result set column names to ORM attributes,
> and that seems to not be the case (and was never the case, AFAIK). That
> kind of mapping would be cool, and might not even be that hard since the
> columns in the RowProxy ._keymap values seem to have the original ORM
> columns in their .proxy_sets.
>
>
> yeah I thought this would work but it requires a proxy_set change, which
> I’d like to make but has me nervous:
>
> class A(Base):
>     __tablename__ = 'a'
>
>     id = Column(Integer, primary_key=True)
>     data = Column(String)
>
> result = sess.query(A).from_statement(
>                 text("SELECT id AS x, data AS y FROM a").
>                     columns(A.id.label("x"), A.data.label("y"))
>                 ).all()
>
> I’ve added two different patches to
> http://www.sqlalchemy.org/trac/ticket/2932#comment:5 which is reopened.
>  both patches work but i think the second one is more of the right idea.
>
> it works like this too but this renders the subquery, something else to
> think about maybe:
>
> A1 = aliased(text("SELECT id AS x, data AS y FROM
> a").columns(A.id.label("x"), A.data.label("y")))
>
> result = sess.query(A1).all()
>
> as does this:
>
> stmt = text("SELECT id AS x, data AS y FROM a").columns(A.id.label("x"),
> A.data.label("y"))
>
> result = sess.query(A).select_entity_from(stmt).all()
>
>
> That said, the only reason I can think of for someone to try that is if
> they did something truly nuts like a join with two columns with the same
> name from two tables which *also* have the same name, from two different
> schemas, with a stored procedure, into ORM.
>
>
> well I really hate enforced naming conventions so making this work would
> be a breakthrough way of finally getting over that, I like it.  I think
> this can be done.
>
> also, the change greatly increases performance as the lookup in
> ResultProxy doesn’t need a KeyError now.   So I really want to try to make
> it work.  I’m just trying to think of, what are the implications if the
> text() is then transformed into an alias() and such, but I think it might
> be consistent with how a Table acts right now.   I think its cool:
>
> stmt = select([A.id, A.data])
> result = sess.query(A).from_statement(stmt).all()   # works
>
> stmt = select([A.id, A.data]).alias().select()
> result = sess.query(A).from_statement(stmt).all() # you get the same
> column error
>
>
> I hope I'm not harassing you too much about the TextAsFrom feature! I feel
> like if I asked any other ORM to be this flexible they would either laugh
> or cry. SQLAlchemy is the first ORM I've worked with since using Rails as
> an intern, and I'm spoiled now with how awesome it is :)
>
>
> its great, this feature is going to be much better and important than how
> it started a few months ago.  I’ve added a lot of new thoughts to that
> ticket.
>
>
>

-- 
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/groups/opt_out.

Reply via email to