Hmm, I was thinking in labeling this evening. I'll try tomorrow when
I get to work and then try this alternative. Maybe it works and avoids
my workaround :)
Thanks Mike.
Best regards,
Richard.
Em
2013-04-25 19:20, Michael Bayer escreveu:
> 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 <[email protected] [37]>
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 <[email protected] [28]> 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
<[email protected] [19]> 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 <[email protected] [10]> 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 [1] .
>>>>>>>>>
>>>>>>>>>
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 [email protected] [2].
>>>>>>>>> To post
to this group, send email to [email protected] [3].
>>>>>>>>>
Visit this group at http://groups.google.com/group/sqlalchemy?hl=en
[4].
>>>>>>>>> For more options, visit
https://groups.google.com/groups/opt_out [5].
>>>>>>>> --
>>>>>>>> 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
[email protected] [6].
>>>>>>>> To post to this
group, send email to [email protected] [7].
>>>>>>>> Visit
this group at http://groups.google.com/group/sqlalchemy?hl=en
[8].
>>>>>>>> For more options, visit
https://groups.google.com/groups/opt_out [9].
>>>>>>> --
>>>>>>> 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
[email protected] [11].
>>>>>>> To post to this
group, send email to [email protected] [12].
>>>>>>> Visit
this group at http://groups.google.com/group/sqlalchemy?hl=en
[13].
>>>>>>> For more options, visit
https://groups.google.com/groups/opt_out [14].
>>>>>> --
>>>>>> 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
[email protected] [15].
>>>>>> To post to this
group, send email to [email protected] [16].
>>>>>> Visit this
group at http://groups.google.com/group/sqlalchemy?hl=en [17].
>>>>>>
For more options, visit https://groups.google.com/groups/opt_out
[18].
>>>>> --
>>>>> 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
[email protected] [20].
>>>>> To post to this
group, send email to [email protected] [21].
>>>>> Visit this
group at http://groups.google.com/group/sqlalchemy?hl=en [22].
>>>>> For
more options, visit https://groups.google.com/groups/opt_out [23].
>>>>
--
>>>> 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
[email protected] [24].
>>>> To post to this
group, send email to [email protected] [25].
>>>> Visit this
group at http://groups.google.com/group/sqlalchemy?hl=en [26].
>>>> For
more options, visit https://groups.google.com/groups/opt_out [27].
>>>
--
>>> 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
[email protected] [29].
>>> To post to this group,
send email to [email protected] [30].
>>> Visit this group at
http://groups.google.com/group/sqlalchemy?hl=en [31].
>>> For more
options, visit https://groups.google.com/groups/opt_out [32].
>> --
>>
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
[email protected] [33].
>> To post to this group,
send email to [email protected] [34].
>> Visit this group at
http://groups.google.com/group/sqlalchemy?hl=en [35].
>> For more
options, visit https://groups.google.com/groups/opt_out [36].
>
> --
>
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
[email protected].
> To post to this group, send
email to [email protected].
> Visit this group at
http://groups.google.com/group/sqlalchemy?hl=en [38].
> For more
options, visit https://groups.google.com/groups/opt_out [39].
Links:
------
[1] https://github.com/marplatense/sqla_hierarchy
[2]
mailto:[email protected]
[3]
mailto:[email protected]
[4]
http://groups.google.com/group/sqlalchemy?hl=en
[5]
https://groups.google.com/groups/opt_out
[6]
mailto:[email protected]
[7]
mailto:[email protected]
[8]
http://groups.google.com/group/sqlalchemy?hl=en
[9]
https://groups.google.com/groups/opt_out
[10]
mailto:[email protected]
[11]
mailto:[email protected]
[12]
mailto:[email protected]
[13]
http://groups.google.com/group/sqlalchemy?hl=en
[14]
https://groups.google.com/groups/opt_out
[15]
mailto:[email protected]
[16]
mailto:[email protected]
[17]
http://groups.google.com/group/sqlalchemy?hl=en
[18]
https://groups.google.com/groups/opt_out
[19]
mailto:[email protected]
[20]
mailto:[email protected]
[21]
mailto:[email protected]
[22]
http://groups.google.com/group/sqlalchemy?hl=en
[23]
https://groups.google.com/groups/opt_out
[24]
mailto:[email protected]
[25]
mailto:[email protected]
[26]
http://groups.google.com/group/sqlalchemy?hl=en
[27]
https://groups.google.com/groups/opt_out
[28]
mailto:[email protected]
[29]
mailto:[email protected]
[30]
mailto:[email protected]
[31]
http://groups.google.com/group/sqlalchemy?hl=en
[32]
https://groups.google.com/groups/opt_out
[33]
mailto:[email protected]
[34]
mailto:[email protected]
[35]
http://groups.google.com/group/sqlalchemy?hl=en
[36]
https://groups.google.com/groups/opt_out
[37]
mailto:[email protected]
[38]
http://groups.google.com/group/sqlalchemy?hl=en
[39]
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.